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.