Keys

General key binding work. We now listen for things keys like ctrl-n and ctrl-o, as well as for key events like ctrl-shift-f4 and command-q. Specifically:

 * abstract action, keybinding, and actionmanager classes
 * key bindings can be defined in such a way that they work well cross-platform. You can have a default key binding and register one to prefer for specific OSes
 * generally, one actionmanager singleton would be used per application
 * an action can describe its keybinding in a user friendly way
 * added tests

@keertip @dinhviethoa