Add promises to the widget framework.

Parallel to @jasongrout 's solution (human race condition).
Yes, the `state_lock` prevents the backbone events from causing the same state changes received from the back-end being echoed back to the back-end.