Reset swizzled methods when deallocating

Forgetting to reset a swizzled method is an easy mistake that can introduce unexpected behavior. For example, in the case of writing tests, a swizzled method usually needs to be reset after each test or subsequent tests can fail.

By resetting any remaining swizzled methods on dealloc, it is no longer necessary to add these reset calls manually. The only time a manual reset is necessary is when the `resetWhenDeallocated` is explicitly set to NO.