Implement InboundBootstrapRegister
Refactor Socket constructor

Refactor most of Socket constructor into its own open() method, so that sockets
may be closed and reopened (as in the case of PeerListRequests).
Refactor OutboundBootstrapRequestPeerList

Had to reestablish bootstrap connection between stages because following:

KLUDGE: Because of the way the Listener hands off a message to its
workers, there's no way to maintain the same connection between
receiving the initial request and the subsequent request.
Implement InboundBootstrapRequestPeerList

Use same ServerSocket flow as the Download request/response