Illustrate bug with current ancestor approach
Candidate fix for #258.
Add a benchmark for finding the original method early.
Refactor to improve perf.

- Don't get the original method handle for a test double
  (it doesn't have an original method as its not a partial mock).
- Leverage InstanceMethodStasher; since it has to stash the method
  anyway, it can store it so we don't have to waste effort getting
  it.
- Delay getting the original_method until the last possible moment:
  right before we redefine it with a new definition.

As a side benefit, this change makes it so that we no longer
"leak" odd obfuscated aliased methods onto partial mock objects.
This is a good thing.

I ran benchmarks of this commits vs the prior (unoptimized fix)
vs what we originally had in master using this shell command:

time (for i in {1..20}; do bin/rspec -fp --order default; done)

Here are the totals:

- this commit: 39.070 seconds
- prior unoptimized fix (c864e0a530add6638e404b84d1608652f3882060): 39.936
- master (80d80d919434e6fe0425b3fa5edab49fe28ea9a9): 37.783
Fix for ruby 2.0.

For some reason on Ruby 2.0, we were getting this error:

  TypeError:
       compared with non class/module
     # ./lib/rspec/mocks/instance_method_stasher.rb:73:in `define_method'
     # ./lib/rspec/mocks/instance_method_stasher.rb:73:in `restore'
     # ./lib/rspec/mocks/method_double.rb:74:in `restore_original_method'
     # ./lib/rspec/mocks/method_double.rb:94:in `reset'
     # ./lib/rspec/mocks/proxy.rb:123:in `block in reset'
     # ./lib/rspec/mocks/proxy.rb:123:in `each'
     # ./lib/rspec/mocks/proxy.rb:123:in `reset'
     # ./lib/rspec/mocks/proxy.rb:118:in `verify'
     # ./lib/rspec/mocks/space.rb:14:in `block in verify_all'
     # ./lib/rspec/mocks/space.rb:13:in `each_value'
     # ./lib/rspec/mocks/space.rb:13:in `verify_all'
     # ./lib/rspec/mocks.rb:18:in `verify'
Merge pull request #264 from rspec/get_original_method_early

Candidate fix for #258