Add a new context manager, Widget.hold_sync(), which holds any syncing until the manager exits


Sometimes for consistency or efficiency purposes, it makes sense to update
a group of properties all at once (i.e., an atomic update).  This context manager makes this possible.

Another approach to this would be to hold any trait notifications, instead of holding widget sync messages.  That is more powerful, of course, but could also be more controversial.

We also fix a bug where send_state was not passing the key on to get_state.
Shouldn't this check be done on the entire block?  Even with a sync hold, you don't want to echo trait's that the front-end have sent to the back-end.