Split peer connect logic to another class (RIPD-711): 

All of the logic for establishing an outbound peer connection including the initial HTTP handshake exchange is moved into a separate class. This allows `PeerImp` to have a strong invariant: All objects that exist represent active peer connections that have already gone through the handshake process.

Reviewers: @nbougalis, @rec 
Ach, I hate seeing this numeric shit.  There are so many ways to go wrong.

What if `size` is unsigned and `> 0x80000000`?  Or, is it signed, and negative (seems impossible but will check...)