Structured Overlay implementation

What needs attention here are the completion handlers and surrounding implementation for the client role and server role. Client role means an outbound connection, while server role means an inbound connection. The functions belonging to each group are marked in PeerImp.h and PeerImp.cpp

Need @JoelKatz and one other person who is not Nik to review this, perhaps @ximinez

I just reshuffled this code, I didn't write it. But looking at it, its hard to imagine how packet could be `nullptr` if `!mSendQ.empty()`