Also cancel keypress wait on enter/return

These are not valid shortcut bindings.
Improvements to threading

Includes logging, better documentation, catches for bare exceptions, and
stack traces from threads.
Differentiate between built panels and set panels

When dealing with service dialogs, panels need to be built only the
first time the window is shown, but their input values need to be reset
every time the window is shown.
Set configuration window title

This was just "AwesomeTTS" before.
Ignore "service busy" exception in review mode

Unlike the dialogs, the review mode is less controlled, and multiple
playback requests can come in accidentally from quick forward/backward
movements in a card set or from repeated shortcut keystrokes.
Improve message handling of exceptions in router

If an exception coming up to the GUI level has a 'reason' but no
'message', we can attempt to populate in the 'message' based on the
contents of the 'reason' so the GUI level will already have this ready
for it when the callbacks fire.
Generate cache filenames with hyphens

Breaks the SHA1 hash into 5 groups of 8 characters, split by hyphens, so
the horizontal scrolling does not occur in the editor fields.
Wire up Editor Generator recording

Provides inserting MP3s into the editor fields.
Support for remembering service forms in config

This is done by returning a dict lookup which the accept() method is
free to use to call config.update() with.
Enable/disable AwesomeTTS editor generator button

This wraps the enableButtons method on the Editor class so that the
toolbar can be correctly enabled and disabled as a set.
Enable/disable AwesomeTTS menu in Browser

This one is based on the number of cards selected, with the menu only
being enabled if at least one card is selected.
Display only active fields in Mass Generator

This changes the show() implementation to check the actual selected
cards for their possible fields, rather than the entire collection's.