Make the widget property_lock store the JSON state, not the original object

Comparison between arbitrary python objects can get crazy, whereas we really
only care about if the JSON state we are syncing is different.  So with this change,
we store and check against the JSON state.
Merge pull request #6332 from jasongrout/widget-property-lock

Widget property lock should compare json states, not python states