feat: add IncomingDataStreamManager to deal with all outbound data stream logic
The goal here is to try to break up the massive Room class into some
smaller pieces to make it a bit easier to reason about. This seemed like
a pretty straightforward piece to cleave off.
I don't like a few things about this but it's a good place to start:
- IncomingDataStreamManager is associated with Room, and
OutgoingDataStreamManager is associated with RTCEngine. Pick one.
- IncomingDataStreamManager calls this.room.emit? Is that weird? Maybe a
better interface could be defined?