[vim] Keyhandling rewrite

@heppe before this gets even more out of hand, I figured it's good to ask for a review now.

I've rewritten the key handling code such that
- Vim catches keydown/keypress events directly, no longer using CodeMirror's key handling framework (small exceptions for insert mode)
- Arbitrary key mappings can now be added for insert mode, with rudimentary back-delete support
- Key sequences are defined using strings instead of arrays (also redid the formatting of the keymap)

I have the hope that we can build on this to make the macro mode support less hairy, though I think insert mode keys still have to be recorded separately so it might not help all that much...

There's a bit of a browser compatibility concern here... Only really tested on Chrome
having trouble seeing what's going on in this function, but I'll stare at it some more tonight.