Add Events

Developers have the ability to create their own EventManagers, this
adds the possibility of custom EventManagers which require certain
types of Event. This also means developers can pass Events to different
Listeners rather than all of them. This feature is here purely to give
the option to developers if they need it, however it is unlikely that
it will ever be used.