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 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
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.
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.