Add in Dispatchers.

Dispatchers are essentially a higher-order proxy for event listeners.
They namespace event registration, so multiple dispatchers can listen
for the same event on the same element.

This is part of the setup for better Interactions in the future.
Rather than create ad-hoc listening structures in each Interaction,
in the future Interactions should use Dispatchers to listen for
events and respond accordingly.

Currently there is only the base Dispatcher and Mouse Dispatcher, but
more will be added in the future.
This could be
```typescript
dispatcher._event2Callback["click"] = () => callbackWasCalled = true;
```

since `x = y` is an expression that returns `y`.