Enumerate over dictionary keys and values without allocations

## "Work In Progress"

This pull request offers an alternative to #147. It eliminates the allocations when evaluating the `Keys` and `Values` properties of `ImmutableDictionary<TKey, TValue>`, but does so without increasing the allocated size of an `ImmutableDictionary<TKey, TValue>` instance.

The documentation associated with the members created by this pull request do not currently meet my own quality standards, but I sent the pull request before going through that part in detail in order to get early feedback. If the community believes this approach is the desired implementation for this functionality, I will go back through the documentation in detail.
Thanks for taking a look. I wasn't sure what breaking changes policy was in place since no stable releases of [System.Collections.Immutable](https://www.nuget.org/packages/System.Collections.Immutable/) have appeared on NuGet yet. I see now that the changes are also evaluated against the stable release of [Microsoft.Bcl.Immutable](https://www.nuget.org/packages/Microsoft.Bcl.Immutable/).

Tomorrow I'll update this pull request to revert the change to this property and instead expose the `KeyCollection` and `ValueCollection` constructors, which allows users to use instances of these types without incurring allocations. Use of the `Keys` and `Values` properties will require a boxing allocation but should be slightly more efficient overall than the current iterator implementation.