Add promises to the widget framework.

Parallel to @jasongrout 's solution (human race condition).
Let's think about this for a second.
- create_view creates a promise
-.then adds the function to the promise's internal "then" list
The concern is that the promise created by create_view will get GCed.  How is that promise created?
- enter into create_view, the promise created is set to model.state_change, and model.state_change is returned.
I think as long as model.state_change exists, which is always will, we don't have to worry about it getting GCed.  I think the other promises are the same way, you can trace them back until you hit a concrete reference.  

The only place I'm not 100% sure what happens is in utils.load_class, where require.js takes over.  I'm guessing it's fine though, otherwise other people would have trouble with the context surrounding require.js being lost and inaccessible from closures.