Put entity message loop checking inside debug clause so purposeful recursion doesn't incorrectly trigger as an endless loop.
Substantial Update - Revisited component event handling and made some structural changes:
 - component-level "addListener", "addListeners", "removeListener", and "removeListeners" methods have been deprecated in favor of "addEventListener", "removeEventListener", and "removeEventListeners" with syntax similar to equivalently named DOM JavaScript methods.
 - There is no longer a component-level conflict between events and methods having identical names. In the same vein, this['event-name']() can no longer be used to run an event's associated handler: events must be triggered at the entity level.
 - All standard components have been updated to use the component factory.