Adds Interval Tree Clocks and Vector Clocks with an algebraic approach

I've been geeking out on this for the past few nights.

1) implementing Interval Tree Clock was really fun.

2) I noticed a new concept: a partial semigroup. It seems useful to build operations that are robust to duplication.

3) I think with this, we can make storehaus work with Partial semigroups, which means if we store a value with type (C, T) where we have a clock for C and a semigroup for T we can get duplication tolerance. This is still a little vague to me, but I'd appreciate feedback.
Does this have more general use outside of KV stores? Given it is functionality in terms of tryPlus, do we want it to be in the base trait? I only ask because it seems quite specialized...