Add promises to the widget framework.

Parallel to @jasongrout 's solution (human race condition).
Whoops, yes, this is left over from when I implemented your PR comments.  I used `load_class` instead of `load`.  I'll correct the later today when I have access to one of my dev machines.