Add avl utilities

This PR introces a few utilities for use in recursive algorithms like `avl_union()`.
Why do you use a new linked list implementation here? We already have a linked list implementation, why not using this one?