Simplified the keyboard implementation.

- Atomics were more complex than simple locking in this case.

- Made the interface a little more consistent.
Merge branch 'dev' into runtime
Started writing characters to the screen though the helper.

- Added some better logging for debugging.

- Increased the granularity of the synthesizer in an attempt to reduce
  latency. Didn't really do much: there's a noticeable delay between
  pressing a key and hearing a sound. Plus, the duration of the tones
  are still very variable. I'm not sure how to fix this yet...