huge simplification for the FSM encoding: use JSON data.

no structural change, but now the data can live in the prototype.
before it involved functions that needed access to 'this', and so
had to be wired together in the constructor.
replaced is-a with has-a and got CoverBlock working.

lots of cleaning up, too. focusMouse was very tricky - had to move
it to the tail end of the event handlers so it wouldn't interfere,
which really doesn't make much sense but it works. it's more visually
distracting to have the focus changing constantly (rather than just
on keydowns), but i'm starting to think it is much less surprizing -
the ui always shows where the next key will go instead of some weird
magical jumping focus.