Additional weak constructor. destroyed() can be pure virtual.
Replace onAnyDestroyed() with lambda-based on_any_destroyed().
Change ondestroy() function's first parameter to a lambda.
Replace addOnDestroy() with ondestroy() obj method.

Rename it, the ondestroy() replacement takes a functor lambda as
a parameter.

Remove destroyCallbackObj (make it an inner class of obj, still
implements the base functionality).