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.
Also corrects the in-view logic. Now checks if the aimer can see the target, not if the target is within a given radius. Fixes#11926.
Cleans up Destroy() code a bit.