Add PublicEmitter class

BasicEmitter for encapsulation where extending the Emitter isn't an option

cc @Raydiation @karlitschek @MTGap @bartv2