Construct better exceptions
Fix returning promise from dispatch_promise()

Was throwing because Deferred can't resolve a Promise. Though maybe I should just make that possible.

+tests