Add optimization for ImmutableList<T>.AddRange when adding non-empty range
to non-empty list
Apply same optimization for ImmutableList<T>.InsertRange, also add more
  test coverage
Make InsertRange rebalance list correctly
Change Node.Root to internal to facilitate testing
Revert changes to InsertRangeTest
Add more tests
Add doc comment for BalanceNode method
Add reference equality check to SetEquals methods.

The SetEquals methods are rather expensive, and it's a quick and super-effective check to compare reference equality between the two collections before engaging in the expensive work.
Add more verifications to ImmutableList.InsertRange perf fix.

InsertRangeRandomBalanceTest currently fails on all of my runs because VerifyBalanced finds height differences of 2 or -2.
One failing run is with rand seed: 1135977305
Add more verifications to ImmutableList.InsertRange perf fix.

InsertRangeRandomBalanceTest currently fails on all of my runs because VerifyBalanced finds height differences of 2 or -2.
One failing run is with rand seed: 1135977305
Call AddRange and InsertRange from corresponding Builder methods
 - This fixes failing InsertRangeRandomBalanceTest
Also refactor AddRangeBalanceTest to add random batches and verify
  balance after each
Make test failures easier to parse.
Fix ImmutableList`1+Node.MakeBalanced method.

It wasn't balancing the tree properly, as it would allow branches to be +/-2 off instead of only allowing a variance of +/-1. This was caught by the InsertRangeRandomBalanceTest failing test, which now passes.
Move VerifyBalanced method to a more common test location.

This will hopefully allow us to use it for other AVL-based collection types.
Fix test bug that caused failures for balanced trees.

The formula by which the maximum allowable tree height was calculated was faulty, causing some balanced trees to be reported as being too tall. The new formula comes from http://en.wikipedia.org/wiki/AVL_tree and seems to succeed reliably.

I've also moved the height verification to another class so that we can reuse it across other AVL-tree based collections.
Fix MakeBalanced method to correctly balance tree after Insert is called

When ImmutableList<T>.Insert adds a node, MakeBalanced is called to
rebalance the tree.  However this rebalance is not correct when the tree is
right heavy by > 1 and the right node is left-heavy by 1, and vice versa.

Also added a minimal test to expose bug, and modified RandomOperationsTest
to verify the balance of the tree after each operation

Fix #103
Merge branch 'master' into immutablelist-addrange-optimization
Remove duplicate VerifyBalanced method.

This method was introduced in two pull requests. In this branch, the method was already moved to another location.
Merge ImmutableList<T>.AddRange perf boost to master.
Thanks @PatrickMcDonald.
Merge master
Replace test verification with more stable equivalent.

This verification failed in my own random test method, and I have a replacement that works, so I applied it to this test for stability.
ImmutableList<T>+Builder.AddRange perf boost.
Add tests that cover the SetEquals reference equals optimizations.