Improve lookup perf on immutable dictionaries and sets

This commit creates a specialized version of ImmutableSortedDictionary`2.Node that setsTKey as Int32.  This allows the implementation, which is used by both ImmutableDictionary`2 and ImmutableHashSet`1, to avoid multiple interface calls per node during lookups, doing the Int32 comparisons directly rather than going through Comparer<int>.Default, which in turn goes through Int32's IComparable<T>.CompareTo implementation.
Change SortedInt32KeyNode.height from Int32 to Byte.

This decreases the size of the SortedInt32KeyNode on both 32-bit and 64-bit by ~10%.
Addressed PR feedback from AArnott

- Changed height calculations to be checked, to help catch any issues with balancing logic
- Removed unnecessary Requires.NotNullAllowStructs calls for keys we know to be structs
- Changed a couple of "left == null" checks to be the equivalent IsEmpty, for readability
Remove several unnecessary comments
Merge pull request #164 from stephentoub/immut_compare_perf

Improve lookup perf on immutable dictionaries and sets