Add promises to the widget framework.

Parallel to @jasongrout 's solution (human race condition).
This catch call will then carry on the promise resolution chain as normal (i.e., errors won't propagate onward).  Is that what we want (_handle_comm_open always to return a resolved promise), or do we want that .catch() function to return a rejection so the error propagates up?