Parameterize class method proxying to allow for the doubling of context managers

Since Python does some weird things under the covers when invoking `__enter__` and `__exit__` in a `with` block, we have to do the same class-method proxying that we perform with `__call__` for the doubling of a context manager to work. fixes #49