midi helper improvement: multiple channels support

The main change is the multiple channel support,
but actually the full list of changes is slightly bigger:

- MidiMessage is renamed to MidiInstruction to avoid confusion because
  is not the same thing as messages used in the binary MIDI protocol.
  The "command" is renamed to "opcode" for the same reason.
- Support for playing instructions into multiple channels.
  Now the MidiInstruction objects carry an additional field which is the
  channel index.
- Fix sound dropout when (play-midi) starts playing the sequence.
  That happens because .open() method that was called at that point.
  Fixed by making the singleton object and .open()'ing them only once
  during the module loading.
- Improve performance of (play-midi). Now it uses constant-time dispatch
  for handling opcodes.
- partially rewritten docstrings