messages: transactional diff

Changes come to the client in diffs
that are all or none. Changes can't be partially
applied so this is reflected at the message level.