Make Observer a real class; generic event emitter