Add notion of action to keyboard manager.

Instead of directly registering a function on the keyboard manager that takes closure and event parameters, this also also to register a `string`, that map to an `action`. Each action is a dict that comprise the `help`, `help_index`, and a `handler` as before, but handler take one more parameter. And this will allow to also associate a icon (font-awesome) with the action. In the end custom keymap will just be json-able dict, so easier to configure. This would also allow to make a menu<-> action link (so why not a dynamic menu) and or show shortcut next to menu items.

Ping @ellisonbg 
We also use `above/below` and `next/prev` inconsistently. The API is private, but the shortcut names will be more public. We should make all of this consistent.