Added avl type which contains the avl tree
Rewrote interface for avl type

Added `struct avl` type, which contains the tree.

This required a re-write of the interface definition for the
`struct avl` type.
Adapted implementation of avl_alloc() to new interface
Adapted implementation of avl_destroy() to new interface

Introducing a new helper function for destroying a subtree.
Adapted avl_add() to new interface definition

Modifying insert() appropriately.
Adapted current avl_del() implementation to interface definition
Adapted avl_find() implementation to new interface definition
Adapted avl_unlink() implementation to new interface definition
Added typdef for predicate function type
Removed avl_unlink()