Rework constructors so protocol identifiers aren't exchanged numerous times
Created by: agraubert
Due to the nested nature of the constructors, I'm seeing protocol identifiers exchanged numerous times for a single new top-level class. While this hasn't caused any breaking issues yet, it could if remote sockets are connected at different levels. Other than that, the only issue is extraneous IO