add IEventEmitter/IReadable/IWritable interfaces to deal with multiple inheritance and type constraints