Hookable object support.
Support the efficient creation of hookable objects, which are callable objects
that are meant to be replaced by other callables, at least optionally.
The idea is you create a function that does some default thing and make it
hookable. Later, someone can modify what it does by calling its sethook method
and changing its implementation. All users of the function, including those
that imported it, will see the change.