Base implementation for new protocol

Step 2 of n in the new protocol (#81)

This implements the first parts of the new protocol described by #118. At this point, it's all new code, and is not used in any way. It's compiled by adding `DEFINES+=PROTOCOL_NEW` to the qmake command, but it won't change behavior at all.

Please review carefully and point out anything that seems fragile.
I think this deserves an assert. You just peeked the data fine. If it fails to read, then WTF.

Relatedly, why do you peek it in the first place? You checked that the data is available. Why not read it and discard