Correctly rollback attributes only set on the client

Previous if the server did not provide any value for an attribute,
and the value was set only locally we would fail to roll it back properly.
We now correctly(I hope) deduce which attributes need to be reset.

This change has a side effect of only resetting/notifying the changes of attributes
that were modified from their server state.

cc @wecc