Add AVL implementation

Hi,

we need a AVL implementation, so I started defining an interface for one. Please review!

@neithernut , @theneikos , @manuelmessner
I think we should better return the new root node, instead of the element. This sounds much more obvious, as with the rotation, the root can change!