introduce app.diamond and app.input

this is good because it lets us easily swap out implementations of "get me some input" possibly with
a nice mock implementation for tests (eventually)

NOW:

1. introduce app.diamond.grab_focus

2. The callbacks to grab_focus receive "diamond" keys like 'h' '<C-C>', '<ESC>' 'H' rather than raw
scan_codes. See :help <> for some details if needed. There are 2 callbacks right now, one for normal
mode and one for exec mode.

3. a few simplifications made possible by the new structure

LATER:

4. callbacks to grab_focus shouldn't have the power to determine whether or not to preventDefault
(breaks the abstraction). This is worth another diff since it involves moving the command map to
somewhere where app.input can access it
simplifications

1. rename app.diamond to app.keys

2. merge app.input.{re,}grab_focus and call it app.grab_focus

3. change action_groups[mode]['o:key.diamond'] to action_groups[mode].keys

4. change the grab_focus interface to call the callback with 'H', '<ESC>', rather than with
{diamond: 'H'}, {diamond: '<ESC>'}
bugfix - e.which is evil, duh
bugfix - skip handling of ctrl/alt/meta