Avoid duplicate merge
Avoid duplicate merge (this is a generic optimisation, to do for all CRDTs):
- An object instance memorises the highest timestamp used so far.
- This timestamp is the first field of the serialised object.
- When merging in a remote object, remember its highest timestamp.
- On next merge, if the highest timestamp of the remote object has not changed, the merge is a duplicate. Skip the rest of deserialisation, skip the slow merge algorithm, and retain the local version only.