Allow a method to be monkey patched more than once

There will still be issues if patching and unpatching are done out of order. This is not fixable in the general case.