Handle siblings

This PR adds support for user-defined Merge() to be used to handle sibling objects.

Sibling conflicts aren't overwritten until a write operation (store/push) is called. I'm not sure this is optimal, although it reduces the chances that many clients attempt to resolve conflicts simultaneously.