Add promises to the widget framework.

Parallel to @jasongrout 's solution (human race condition).
Definitely the second, I'll use my handy dandy utils.reject helper to preserve the error chain. :)