better handling of list values in Timeline
restructure Markov to use hashes for node table lookups, rather than a [ nodes, edges ] pair
rehaul of io/midifile to enable parsing of chords (outputting a tuple of notes), with specifiable quantize level