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 

discuss actions names on [hackpad](https://ipython.hackpad.com/Notebook-actions-Names-MXVvot9hyIf)