Make sure callbacks are invoked at the correct time

The trick with triggering a bind event was causing callbacks to trigger
multiple times. This cleans up the dispatcher code, sends the event name to
callbacks on the `bind` event, and makes sure to only call the callbacks
when necessary.
Merge pull request #41 from joecorcoran/dispatch-bug

Make sure callbacks are invoked at the correct time