static L<Method> allLiveMethods_skipOverridden(O o) {
  Class c = _getClass(o);
  bool isInstance = c != o;
  new L<Method> methods;
  Set<Pair<S, L<Class>>> seenSignatures = new HashSet;
  while (c != null) {
    for (Method m : c.getDeclaredMethods())
      if (isInstance != isStaticMethod(m)) {
        Pair<S, L<Class>> sig = pair(m.getName(), methodArgumentTypes(m));
        if (seenSignatures.add(sig))
          methods.add(m);
      }
    c = c.getSuperclass();
  }
  ret methods;
}