Now we'll implement for AVL trees all the operations that we did for
BSTs. Here's the outline. Creation and search of AVL trees is
exactly like that for plain BSTs, and the generic table functions for
insertion convenience, assertion, and memory allocation are still
relevant, so we just reuse the code. Of the remaining functions, we
will write new implementations of the insertion and deletion functions
and revise the traversal and copy functions.