Manager that can be used to track and notify listeners on lifecycle events.
This class is optimized for event firing rather than for adding and
removing listeners, which are O(n) operations. This class also does not
maintain perfect set semantics for listeners; it is possible to wind up
having the same listener invoked multiple times for a single event if it
is added to this manager multiple times with different classes, or with
a base class and its subclass.