Implement gb_trees:modify/3 function

This function is used to modify the value of the given key using the updater function instead of a new value. The updater is called with the current value and is expected to return the new one. Assumes that the key is present in the tree.

Rebased from `pu` branch and reworked from #434