Refactor TestDouble#method_missing.

* Always record the message was received. I think it was
  a bug that for `to_int`, `to_a` or `to_ary` that was
  skipped.
* Move the `return self` case for null objects into the
  existing case statement: no reason to have it later.
* Memoize `__mock_proxy` in a local -- this saves us
  from having to look it up in a hash a few times.
* Simplify the way errors get raised from this method.
  Rather than calling `super` and rescuing `NameError`,
  Just raise the errors directly. I believe this will
  be faster but haven't benchmarked it.
Use symbols not strings for visibility.
Refactor: favor polymorphism over type checks.
Verified doubles should match the visibility of the interface they verify against.
Verified null object doubles should implement `respond_to?` correctly.
Refactor method_visibility helper methods.
`m` is a terrible variable name.
Rename mis-named variable.

It may not be a module reference anymore.
It may be an object reference.
Use `public_method_defined?` not `method_defined?`.

It's more accurate. Also put the more common case
(public methods) first. It should be hit more
often and thus be a tiny bit faster.
Leverage our new method visibility helper methods.

Fixes #475.
Add changelog entries.
Fix null_object `respond_to?` to handle private/protected correctly.
Add benchmark.
Merge pull request #478 from rspec/visibility-improvements

Visibility improvements