Prevent method redefinition warnings

Using subject twice, (or a let) in the same describe block will cause a 
warning, this currently affects `rspec-rails` quite a lot, this fix removes
those warnings by removing the methods before redefining them.

The detection method limits the undef calls to only this scope, not nested
scopes and also should be lazily efficient?