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.
It's actually asserting a sane state; if the channel is opened, it should have a non-negative identifier.