Update Interaction.Key to use dispatchers.

Created `Dispatcher.Keypress`, which calls callbacks when the user is moused over a target element.

`Interaction.Key` now uses `Dispatcher.Keypress`, and can take callbacks to be called on any keyCode. This change allows multiple `Interaction.Key`s to be attached to the same component.

API changes:
* `Interaction.Key.callback()` was removed in favor of `Interaction.Key.on()`, which allows the user to specify a key code to listen for.
* `Interaction.Key`'s constructor no longer takes in a key code.

Partly addresses #837 and #1209.
Array or map?  Since all our entries are numbers, might be slightly space performant to use arrays instead of maps