Fix getkey in the usb keyboard handler so it doesn't trash the usb call backs.
Bunch of small refinements in the fsm code.

'all' is the generic any state instead of nil.
The first state specified is the initial state.
enter and leave are passed the state name of the previous/next state.
Improved error checking.
Bunch of small refinements in the fsm code.
    
'all' is the generic any state instead of nil.

The first state specified is the initial state.

enter and leave are passed the state name of the previous/next state.

Improved error checking.

Add time based transitions that will only trigger after the specified amount of time has elapsed.