Changed the event model to be type-based
Removed the Event class, any object can now be an event

The only purpose of the base Event class was to provide a way for listeners to stop propagation.
This is now achieved by returning false from the listener.
Added tests