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.
Technical english. If the UI wants to present errors differently, they should be in the CommonError enum. Maybe errorMessage isn't useful at all, and we should only have the enum.