Add promises to the widget framework.

Parallel to @jasongrout 's solution (human race condition).
I'd say call this "load" or "load_class".  Do or do not, there is no try.