`array.select { }.size > 0` is less efficient than `array.any? { }` (since `any?` can quit iterating as soon as the block returns `true`).

What do you think about refactoring this so that the logic in the `super_class_observers_for` `select` block is it's own method (e.g. that returns a lambda)?  Then you could do something like this:

``` ruby
def super_class_observing?(method_name)
  @klass.ancestors.any?(&observing_method(method_name))
end
```

..and in `stop_observing!` you could likewise use `&observing_method(method_name)`.