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.
Unfortunately, this is a breaking change that would prevent applications built against the stable 1.0 immutable collections from running against the new version. We preserve binary compatibility between stable package versions and therefore I don't think we can make this transformation.