Keymap

This is a rough-around-the-edges take on implementing a general purpose key-sequence => command binding framework.  See also #30.

The `KeyMap` holds a `Trie` that maps `Key` nodes to editor `Command`s, with a bit of state to keep track of incoming key presses.

The editor can then feed keystrokes to the KeyMap, and receive either a matching `Command`, a `Continue` signaling a partial result that needs more keys to disambiguate, or a `None` indicating that no match was found and the key should be handled normally.

I don't really know what I'm doing here, so there's certainly a lot of room for cleanup and improvements.
Might be a bit cleaner to move this to a separate method. This will grow over time as commands are added, so it might just be neater to have it out of here.

Maybe something like:

```rust
let keymap = setup_keymap();

// elsewhere
fn setup_keymap() -> KeyMap { ... }
```