The usb interface now only allows you to send midi messages,
created via fairly restrictive structs
It should be very difficult to create an invalid midi message now.
This implements a partial implementation of the midi messages,
with the view we can expand later on.
Note that we introduce a datatype to represent the different
kinds of midi messages that may be sent, of various lengths.
I should write better messages, but this shifts the cable
number to follow the numbering usually present in devices (0 is 1 etc).
Also implements some other missing types
This will allow pattern matching and seems to
be more use-able.
Tests are defined to ensure the u8 serialization still
corresponds to expected midi values
This should be much more human readable,
rather than relying on knowing the midi codes.
It should be represented the same way anyway,
and also works with sharps/flats