This is a partial commit for an expensive tree balancer

Decided to write an expensive tree balancer, which does the following:
When a tree has 2 parts not even in size, takes the highest of the lower
tree or lower of the highest tree and makes it root, sending the
original root to the opposite tree, and returning his children to the
tree he came from, knowing this one will be balanced.
as of that, the function "insertNode" will return a Node which is the
new root after the insertion, that way we can easily change root if
needed.

Still need to implement: Changing insert to return a Node, and adding a
sub tree into a tree. (No, we do not need to implement that, as if the
MAX element of a tree has any children, because of the balancer, he can
only have one child, as if he had 2, the balancer would rearrange the
tree so the max would be a leaf, the middle one will be the new center
and the lower one will be a leaf too...)