Currently OwnedRef and ScopedRef have similar semantics with small differences. Furtheremore, the naming distinction isn't obvious.
I propose to unify them as a single OwnedRef class with the following characteristics:
- doesn't take the GIL automatically
- has a release() method that decrefs the pointer (and sets the internal copy to NULL) before returning it
- has a detach() method that returns the pointer (and sets the internal copy to NULL) without decrefing it
For the rare situations where an OwnedRef may be destroyed with the GIL released, a OwnedRefNoGIL derived class would also be proposed (the naming scheme follows Cython here).
Opinions / comments?