Events: allow promise return values from event callbacks

This commit adds events.coffee, which exports Events, an extension of
BackboneEvents to include a `triggerThen` method which returns a
promise, fulfilled either when all the event callbacks have run, or, if
some of them return promises, that all the returned promises are
fulfilled as well.

This will make it possible to implement such things as
`beforeAnnotationDeleted` handlers that prevent the deletion, and, more
immediately, an Editor which can use `beforeAnnotationCreated` and
`beforeAnnotationUpdated` in order to present itself for editing.