Support spying on inherited class methods

method_defined? returns true for inherited methods
instance_methods(false) excludes inherited methods

Using instance_methods(false) prevents us from attempting to remove the
method from the metaclass unless it is actually defined on that instance
of the metaclass (and not inherited from another metaclass).
Fix removing class methods between 1.8 and 1.9

#instance_methods in 1.8 returns strings, not symbols. Most recommend
using method_defined? instead of #instance_methods.include?, however,
#method_defined? doesn't allow filtering of inherited methods.

So, we switch back to using #method_defined? which means we need to
handle the 'method not defined on class' error another way...

Use #undef_method in place of #remove_method which will undefine
inherited methods as well. This is what we should have done all along.

The parent class method is still defined as expected. #undef_method only
hides that implementation from the subclass so it doesn't attempt to
defer to the parent class. This allows a safe #define_method on the
subclass.
Merge pull request #12 from jasonkarns/spies_on_inherited_class_methods

Cannot spy on inherited class methods

Merging this in because I trust @jasonkarns with my life.