I'd like to eliminate all forms of Reset() and all public constructors
on these objects, so the only way to make them is with Take<> and Retain<>
and the only way to copy or move them is with actual c++ copy, move, or
assignment.
This is a simple place to start.
You can consider simplifying this further down to a "universal"/"sink" operator=(PythonObject other). Since the object is really just a pointer, the extra object being created won't hurt (in fact, the removal of &-indirection might make things faster).