Adds ClientMergeable

Will write the tests tomorrow.

closes #459 
Would be good to add a simple check where we attempt to merge  ((k, BatchID(1)), v1) ((k, BatchID(2)), v2) at the same time since we have code for this to ensure its ok.

Also a test confirming if we put something with BatchID(0) into the offline store , we will never change the result by inserting things with BatchID(0) into the mergeable.