Sync backburner & Use run.join in EventDisaptcher

Depends on ebryn/backburner.js#119.

- Backburner now defines a `join` method so the tests and implementation have been extracted.
- `join` now always executes the supplied method immediately and returns its result.
- The EventDispatcher's event handler was changed to use `run.join` so that synchronous events (like focus) do not spawn a nested run loop.

Fixes #5568.