Sync backburner & Use run.join in EventDisaptcher

#### Don't merge until ebryn/backburner.js#119 is merged.

- 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.