adding abstract/emitter as a base class / mixin for event API