use mock.patch to control patch state; improve tests

assign: @amygdalama 

Currently we've got a bunch of hacky custom logic to handle patching and unpatching. . .that didn't even work for `__init__`, haha (exercised by [this test](https://github.com/venmo/btnamespace/compare/fix_unpatching?expand=1#diff-7eb47fc18d4a6196f0940784484a5bf3R34)).

This PR drops our custom stuff in favor of mock.patch.
Advanced search is implemented in a bit of a strange way: https://www.braintreepayments.com/docs/python/general/search_fields. btnamespace doesn't intercept these queries, so instead of allowing search outside of the namespace we just disable any of the fields that'd need to be namespaced. 

There are some integration tests for this further up in the file, but I wanted an explicit check for unpatching too.