Relocated a lot of the ownership of AVL to PEs.

Required a little re-working of the code but I feel that this is a
cleaner approach.  No major performance impacts are expected.
Moved AVL trees from PE to KP.
Fewer pointer derefs.
Updated CMakeLists.txt.
Cleaned up the AVL tree and some performance warts.

AVL tree nodes are now owned by the PE but the trees themselves are
constructed on KPs to keep them smaller.  Additionally, we more
aggressively reclaim nodes from the trees to keep them small.
Created README.md.