EventBuffer update

eventBuffer's type has changed slightly, and new features (SkipAhead,
AddDataToEnd, Tempo) have been added.
midiOutB's default behavior is now AddDataToEnd (rather than AddData)
Fixed excessive redrawing in textbox and listBox widgets.
Widget Graphic boundaries and Resizing

Widgets can now no longer draw graphics outside of their supplied
contexts.
Resizing the MUI window no longer causes a delay and lag issue.
Adjustments to midi widgets

Remove unnecessary unsafePerformIO calls from midiInM and midiOutM.
Changed midiInM and midiOutM to use ArrowChoice recursion.
(Experimental) MidiIO.pollMidi now uses lists of MIDI messages instead
of multiple individual messages for its callback
Fixed Chan Warnings in MUI.SOE

MUI.SOE was using isEmptyChan, which has been deprecated.  This commit
updates the file to use TChans instead of Chans as the warning suggests.
Made time internal to UISF

UISF now instantiates ArrowTime, which provides time :: UISF () Time.
Although a time function was available before, with this new structure,
we guarantee that even if time is used in multiple places within a UISF,
it will always return the same value for the same frame.  This allows
timers and delays to be free of an input time parameter.
Added async function

The async function allows an SF to run asynchronously within an MSF.  It
will commonly be used to perform a costly function that only needs to be
run occasionally from within a UISF.
Added instrument widgets to Euterpea

Instrument widgets piano and guitar are now included by default, as well
as the songPlayer widget, which is useful on its own (perhaps it should
be moved out of InstrumentBase).

An example program was added to Euterpea.Examples, but needs more in the
way of documentation (should be literate, but isn't right now)
Modified UISF/Widget internals

MidiEvents are now no longer part of the Input in a UISF or in the
UIMonad.  Instead, midi messages are treated as regular streaming
values.  This cleans up some code.

Euterpea.IO.MUI.UISF.initialIOAction was added to allow widgets to
perform one-time initialization actions, removing the need for
unsafePerformIO in widgets.
Keyboard event handling now emits all key events

Now, instead of Key and SKey events, we have Character and Key events.
The Character events are fired when a character is pressed down, and at
no other time. This is in keeping with the current version of GLFW.

The Key event sends the GLFW.Key that fired it, as well as whether it
was pressed or released, and which modifier keys were down at the time.
The modifier keys are currently implemented as a tuple of three Bools
for Shift, Control, and Alt, respectively. At this time, the Key event
does not discern between left and right modifier keys for the final
argument. Users who need this level of precision should watch for their
individual events.

All of the widgets dependent on the raw events have been updated to work
with the new system. All of the included examples still function as
expected.

To make the instrument widgets work, I extended Data.Char's toUpper
function to include "uppercase" versions of numbers and symbols on a
standard US keyboard. This is just a temporary fix. The keymap structure
should really be built on keyboard keys, rather than characters.
Removed debugging code from Guitar.
MUI type, name, and namespace refactoring

Graphics.UI.GLFW should no longer need to be imported separately from
SOE (SOE exports everything necessary).
SOE.Event is now SOE.UIEvent to prevent namespace issues.
UIMonad.Input no longer exists (it was just a wrapper for SOE.UIEvent,
so we just use UIEvent now).
Some widgets have been refactored to be more stylistically consistent.
Added MidiWidgets

Moved all of the MIDI stuff from MUI.Widget to a new file
MUI.MidiWidgets.  Now, the core UISF stuff (SOE, UIMonad, UISF, Widget)
are basically MIDI free.
Added a kill message to midiOutB

Added a set of kill messages (Donya explained how in an email) to
midiOutB that gets activated on a Clear or SkipAhead input to prevent
hanging Midi notes.
Added documentation to the instrument files
hlint modifications to MUI

Updated the MUI with some hlint suggestions.
Moved constA from BasicSigFuns to AuxFunctions and made it more general
so it can be used in the MUI.
QuickCheck generators for all of Euterpea's types.

So far only the basic music values have generators. I'm just saving my
progress for now.
Finished HSoM test cases

I encoded every test case that was suggested in HSoM into Euterpea.

Turns out we've got a pretty substantial bug in perf.

All of these test cases were supposed to be true, and anything that was
supposed to be true up to musical equivalence (as defined in the book)
turns up false in at least one test case.

The python script takes care of generating a test program for all the
tests in EuterpeaTests.hs (windows only)
Created full test program
Simplified widget creation, added textboxE

Rewrote midiOut widget to use uisfSinkE (this is cleaner in some ways,
but a better improvement will come soon)
Simplified and commented mkWidget.  Added mkBasicWidget for simple
non-interactive graphic components.
Improved textbox, making it more responsive.  Added textboxE, an
event-based input version.
Update DoRec to RecursiveDo

DoRec is out in favor of RecursiveDo