Handle events before destroying objects

Register event handlers with the object manager, and fire the events
from within DiscardObjects before discarding any objects.

This mitigates problems where event handlers fired in global destruction,
after the object manager already had been garbage-collected
You store references to the objects, but don't clean them up before destruction. Would that not interfere with the object lifecycle management?