since undefined is neither less than nor greater than
anything in Javascript,
the sort function was treating it as equal to everything, causing inconsistent behavior,
depending on the sort algorithm of the browser.
This ensures undefined elements are sorted last in the sequence.
This decouple the notion of shortcut from the notion of executed "action"
This allow the shortcuts manager to be purely describe as data, and the
same action to be later refered to either from the shortcut, from a toolbar
button or a menu.
This also implement a more complete keyboard shortcut handler which is
able ton interpete sequences like `Cmd-X,Meta-v` By storing the
shortcuts in a tree.
Update to codemirror 4.6 and update most notebook to work wiht it
this include keyevent that where triggerd twice and the re-writing of
ipython-gfm anf ipython mode to work with require.
this way, you can ask if a particular event will be handled by the
shortcuts system. This takes away the need to special-case many
different possible keys which should be ignored by codemirror by
ignoring them en masse.