Fixed STI classes not defining an attribute method if there is a conflicting private method defined on its ancestors. (Fixes #11569)

The problem is that `method_defined_within?(name, klass, superklass)` only works correclty when `klass` and `superklass` are both `Class`es.

If both `klass` and `superklass` are both `Class`es, they share the same inheritance chain, so if a method is defined on `klass` but not `superklass`, this method must be introduced at some point between `klass` and `superklass`.

This does not work when `superklass` is a `Module`. A `Module`'s inheritance chain contains just itself. So if a method is defined on `klass` but not on `superklass`, the method could still be defined somewhere upstream, e.g. in `Object`.

See https://github.com/rails/rails/issues/11569#issuecomment-34961233 for the full explanation.

This fix works by avoiding calling `method_defined_within?` with a module while still fufilling the requirement (checking that the method is defined withing `superclass` but not is not a generated attribute method).

4d8ee288 is likely an attempted partial fix for this problem. This unrolls that fix and properly check the `superclass` as intended.

Fixes #11569.