Greatly decreases the number of objects that need to be created (currently 3 event handlers in total vs basically 3 per datum)
The price is a slower lookup of listeners but on a per round basis it should still be much less than the current startup time penalty.
Now limits moved registrations to when strictly necessary. That is:
* When entering a movable atom, the entering object only registers to its moved event if it has moved listeners on its own.
* Instead, when registering to a moved event, registrations occur recursively until a non-/atom/movable is encountered or a prior movement registration from the same object is reached.
Allows movable atoms to follow other movable atoms, as quickly as BYOND allows. Also supports following atoms inside other atoms.
However, this only works fully when Move() or forceMove() is utilized. Setting loc directly will not raise the moved event.
Corrects a number of places where New() did not call ..(), and implements similar changes to attempt to ensure New()/initialize() complete running before qdel() runs.
Cuts down on the number of created items during server start.