Added several test verifications to identify AVL balancing bug.

Issue #105 speculates the existence of these bugs, and this commit includes the tests to prove the bugs exist. With this change, 4 tests fail because the AVL trees for sets and dictionaries are not quite balanced.

There are a few small product changes in this commit to make the product's AVL trees verifiable from the test assembly. Among them is the extraction of an IBinaryTree base interface from the IBinaryTree<T> interface. This is because it's an implementation detail for the collection types what T actually is within the binary tree (it isn't always the same T as the public facing collection type). And when verifying balance of AVL trees, the T itself isn't interesting -- it's all about node count, height, and left/right trees.
Fix AVL tree balancing in dictionary and set collections.

There were certain tree mutations that resulted in a tree that was imbalanced by +/- 2 instead of the maximum allowable +/- 1.

Fixes #105

Amusing little factoid: this immutable AVL tree implementation was originally shamelessly taken from Eric Lippert's excellent blog, which shares this bug: http://blogs.msdn.com/b/ericlippert/archive/2008/01/21/immutability-in-c-part-nine-academic-plus-my-avl-tree-implementation.aspx
Fix capitalization of "AVL" in test helper methods.
Merge branch 'TreeBalancing'