The rest of the frame types

Spec testing (auto-generating test cases given specs for exported
functions) has revealed a few cases in which binaries could parse to
records with invalid values for e.g., QoS. For these cases I've added
extra checks.
Close up another couple of invalid value gaps

Again, QoS is encoded in two bits but must be < 3. The easiest way to
enforce it is to make this a guard, and let other cases fall through.

There's no point in splitting the whole-byte encoding of QoS into the
zero bits and the significant bits, since the input type is
constrained; so, just write the whole byte.