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.
< 1 is not zero-length, technically. Alter the message, and maybe add the size to the BUG()