Abstract event registry to allow for namespacing.

This allows for multiple event registries that can contain the same
event names, but be executed in separate handlers. The `EventManager`
remains backwards compatible by moving all event management functionality to the
`EventRegistry` class and keeping a single static "global" event
registry object to perform the methods.