Add promises to the widget framework.

Parallel to @jasongrout 's solution (human race condition).
Do you really want to catch errors here and not propagate them?  This would pass `undefined` to the next `.then()` in the chain.  Or perhaps you want something like
```javascript
function(e) {console.error(e), return Promise.reject(e);}
```