Add promises to the widget framework.

Parallel to @jasongrout 's solution (human race condition).
This possibly might have a lifecycle problem.  This new promise that is created---how is it kept away from the garbage collector until it resolves?  It goes out of scope just below this.

Perhaps you can set `this.comms[content.comm_id] = this.comms[content.comm_id].then(...)` to store this new promise.  Then trying to do anything else with the comm will have to follow the close action.