Rewrote protocols to make more sense

Specified a custom Message and Frame interface. A Message consists of
multiple frames (zmtp) but works fine with single frame too (sp).

This also makes it possible to stream messages while keeping the
overhead low and retaining the performance of smaller messages.
Add support for multiple Read calls at once

This makes it possible for multiple goroutines to wait for data to
become available from the connection. Once one goroutine has finished
reading its data, next goroutine will be given a slot.
Moved handshake logic into a separate interface

Adds the Negotiator interface which is used for initial handshake.
Fixed hexdump prefix for real