Add promises to the widget framework.

Parallel to @jasongrout 's solution (human race condition).
Again, there is a lifecycle issue here.  I think again that we should set `this.comms[content.comm_id]` to the value of this new promise.  Basically, we are using `this.comms` to not only store a promise that resolves to the comm, but we are also using it to execute the actions in order.  Note that we'll have to return the comm from each such promise so the chain is preserved.