AVL tree implementation in progress.

I have worked out a way to use the contains method to save work when getting/adding things.
Basically, each time you run contains(key), it keeps track of the node it found.
if the tree did not contain the key you were looking for, it keeps track of the node that would be the parent of that key if it were present.

then, if you call get or add with that key, it already knows where it is or where to add it.
thus, the whole two aprt operation runs in logarithmic time with the number of unique characters that have been encountered so far. time.
additionally, you don't need to create a new huffman tree for each character until you know that it has not been encountered before.
and if it has been encountered before, you don't waste time checking for it in the list and then finding it again.
most features besides rebalncing are done.
need to finish non recursive in order traversal.
got in order traversal/array creation working with recursion.
adapted huffmanTree to use the AVL tree properly.
As long as nobody messes with raw types, it correctly creates an array of the generic type, as long as at least one element is in the tree.

tests are going well so far.

next goals are to implement the traversal with an explicit stack instead of recursion.
implement tree rebalancing.
continue with the actually assigned tasks.