Add internal avl rotation functions

This PR adds functions for AVL rotations.
Note that a double rotation can be achieved by two consecutive rotations in oposite directions on a node's child and on the node itself afterwards.
In this whole function there are spaces around assignments missind (`=`) - how does this pass the pre commit hook? Are you actually using the pre-commit hook?