A javascript observer / event emitter implementation with promise support