Update listener to use stream session

Listener is currently broken when multiple connections are created, using sessions allows proper separation of each connection.
A sync condition is added around stream chans to avoid race conditions between setting stream chans and reading them.  The original behavior used the global stream chan when the stream was not found, however that led to synchronization issues when sender/receivers sometimes got back different channels.