Tree: improved complexity.
Tree: improved complexity.

On a trivial benchmark (initialising a tree with a lot of values), this
patch introduces a 20-times speed-up (around 60 seconds to around 3).

This is achieved by removing unrequired structural comparisons when
inserting/removing a value in the tree.

The function `add/add_tree/remove` try to reduce the pressure on the GC
by not reallocating the tree when the resulting tree is (structurally)
equal to the previous one. But instead of only comparing the inserted
value to the previous value (if it exists), the current implementation
also recursively compare all the nodes on the insertion path.

This patch simplify the insertion/removal, by changing the type of the
recursive function `aux`. It now returns an option : `None` when the sub
tree was not modified.

mirage/irmin,mirage/irmin