Modify avl_find to return a pointer to a pointer

This PR modifies `avl_find()`. While previously it returned a pointer to a node or NULL, now it will return a two-level pointer.
This is a prequisite to my work on the `avl_union()` algorithm.
Do you really need this cast?