Add prop_transform_compose property and make it hold

prop_transform_compose states that for every pair of
operations a and b, a' ∘ b = b' ∘ a where
(a', b') = transform(a, b). Because the operations

* delete(3), insert("something")
* insert("something"), delete(3)

are equal when applied to any valid, (==) should
report them as equal. Therefore, we enforce that
the insert always comes first.
Improve equality test for TextOperation

The new implementation of (==) from Eq normalizes the operations before
comparing them. This makes (==) return True iff two operations have the
same effect on every input document.