Adds failing example demonstrating regression with #264
Candidate fix for #264

* Calling `Method#to_proc` binds `self` to the object which does not do
  the right thing when accessing instance variables from a child class
  (see the test case)
* Correctly restores the visibility of methods that we did not stash.
  The visibility might have changed, though, because the same method can
  have different visibilities depending on from where it is called.
* Do not attempt to restore the visibility of simple stubs because their
  visibility will not change and we did not store it in the first place.
Initialize ivar to avoid ruby warning.

warning: instance variable @original_visibility not initialized
Fix spec that created the wrong stasher instance.
Fix 1.8.7 failure by putting special-case code for 1.8.7.

On 1.9+, the following code snippet works fine but it fails on
1.8.7 with `TypeError: singleton method bound for a different object`

  klass = Class.new do
    def self.say_hello; end
  end

  subclass = Class.new(klass)

  hello_method = klass.method(:say_hello)
  (class << klass; self; end).__send__(:define_method, :say_hello, &hello_method)

  subclass.say_hello

The best we can do is to revert to the old stashing/unstashing code
for 1.8.7.
Favor SomeClass === object over object.is_a?(SomeClass).

It seems more likely for users to mess with `is_a?` on
an individual object then `Class#===`, so it's better
to use the latter.