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