Refactored ConnectionInitalizer to be passed into InternalStreamConnection

Added PipelinedConnectionInitializer which handles getting the connection id and
authentication.  It implements both ConnectionInitializer and InternalConnection
and uses the StreamPipleine.

InternalStreamConnection also uses the StreamPipeline but StreamPipeline is aware
if the stream is ready for use - so that the ConnectionInitializer can also support async