Create Python `using_allocator` wrapper
Create Python `using_allocator` wrapper

Provide a `contextmanager` at the Python level by simply calling the
Cython generator in a loop and `yield`ing it's contents. This should
only ever be one `yield`, but it does ensure the correct behavior with
respect to setup and teardown. As there is no special error handling in
the Python function, skip this part. Make a note in the docs that this
is a wrapper and why it exists.

cupy/cupy,cupy/cupy,cupy/cupy,cupy/cupy