Add promises to the widget framework.

Parallel to @jasongrout 's solution (human race condition).
When the promise resolves, it *should be* free for the GC to collect.  My reasoning is that I assume before resolution it's stored in a "to be resolved" list (+1 reference to the promise).  After resolution, I think it'd be removed from the list (-1 reference to the promise) and the GC would be free to deallocate the memory ([JS GC reference counting alg.](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management#Reference-counting_garbage_collection)).  

*Disclaimer: I'm not presenting this as a fact, instead as an assumption.*