Add promises to the widget framework.

Parallel to @jasongrout 's solution (human race condition).
Again, possible lifecycle issues here.  Will this new promise stay out of the garbage collector until it has resolved?