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.
ah, we don't want to store their state key in the set of things to sync later, right.  I'll make that change.