MethodBinding and OverloadMapper held PyObject `target` references that
were not disposed during tp_clear, leaving Python-side refcount drops to
wait on the multi-hop .NET finalizer chain. They also shared the same
C# PyObject instance across mp_subscript/Overloads paths, so freeing one
could free the underlying Python object out from under the others.
- ExtensionType: add virtual OnClear() hook called from tp_clear before
the GCHandle is released, letting subclasses eagerly drop owned
Python references.
- MethodBinding/OverloadMapper: override OnClear to dispose `target`.
(`targetType` is intentionally not disposed since Python types are
long-lived and tracked by other caches.)
- Take an independent INCREF'd PyObject copy at every site that hands a
shared target into a new MethodBinding or OverloadMapper, so each
wrapper owns its own reference.
Result: the three _does_not_leak_memory tests drop from ~485 MB delta
to ~10 KB delta on Python 3.14.