Add AVL implementation

Hi,

we need a AVL implementation, so I started defining an interface for one. Please review!

@neithernut , @theneikos , @manuelmessner
These should be typesafe because we actually use variables in here.

We use a block `({...})`, so the temporary variables get out of scope after the macros are used.