Codechange: Extract abstract base class from TypedEvent manager for later reuse
Cleanup: Move EventManager related types to separate folder