Perf improvements for enumerating immutable collections

@AArnott asked me to take a look at improving the performance of enumerating immutable collections.

This PR addresses that.  Through a set of changes aimed primarily at improving inlining, minimizing interface-based dispatch, and getting expensive calls off hot paths, I see the following improvements on my machine.  These approximate improvement numbers are for enumerating the relevant collection of size 0, 1, and 1000, and are based on dividing the old time by the new time.  These number are also with the 32-bit JIT from VS2013; the improvements aren't quite as significant with the VS2013 64-bit JIT, but they're still quite good.

ImmutableList:
Empty – 1.6x
Single element – 2.2x 
1000 elements – 2.9x

ImmutableHashSet:
Empty – 1.3x
Single element – 1.7x
1000 elements – 1.6x

ImmutableSortedSet:
Empty – 1.9x
Single element – 2.5x
1000 elements – 2.7x

ImmutableDictionary:
Empty – 1.2x
Single element – 1.6x 
1000 elements – 1.4x

ImmutableSortedDictionary:
Empty – 2x
Single element – 2.5x
1000 elements – 2.75x
If that's the worst issue that comes from my change, I'll be ecstatic ;)