ImmutableCollections: include the key in the "duplicate key" exception message

This makes the exception message much more useful in log files.
Disable the NuGet cache when installing Microsoft.DotNet.BuildTools

Fix #206
Respond to code review feedback
Fix /property:OS=Unix build of System.Console

Some resource strings got lost in the move to GitHub.  There was also an inconsistency with the available NuGet packages and where SafeHandle lives.
Fix vector tests warnings about obsolete Marshal.SizeOf

The System.Numerics.Vectors tests were causing build warnings like the following:

Vector2Tests.cs(15,29): warning CS0618: 'System.Runtime.InteropServices.Marshal.SizeOf(System.Type)' is obsolete: 'SizeOf(Type) may be unavailable in future releases. Instead, use SizeOf<T>().

This changes does exactly that.
Add System.Runtime.Handles reference to System.Console
Merge pull request #185 from akoeplinger/key-in-exception-message

ImmutableCollections: include the key in the "duplicate key" exception message
Merge pull request #210 from PatrickMcDonald/buildtools-cache

Disable the NuGet cache when installing Microsoft.DotNet.BuildTools
Merge pull request #221 from stephentoub/fix_vector_test_warnings

Fix vector tests warnings about obsolete Marshal.SizeOf
Merge pull request #220 from stephentoub/fix_console_unix

Fix /property:OS=Unix build of System.Console
Avoid boxing ImmutableHashSet<T>.Enumerator.

This introduces a pattern that can be applied anywhere to conveniently avoid boxing one's own Enumerator struct without duplicating the body of foreach loops everywhere.
Slight syntax touch-ups in response to feedback.
Remove erroneous use of GetEnumerable.

Its use on HashSet<T> is not necessary. The local variable is already strongly typed and will get the struct enumerator. In fact GetEnumerable would have made this code worse.
Fix handling of IDisposable enumerator structs.

In adding code to opt-in ImmutableArray to the GetEnumerable extension method, I noticed it didn't work because ImmutableArray`1+Enumerator didn't implement IEnumerator<T> (because it doesn't want to be disposable to reduce code gen size). This called to my attention that the EnumeratorAdapter`2 type didn't implement IDisposable itself, so it would not recycle the stacks used by our several AVL-tree based collection's stack objects used by their enumerator structs.

To fix this, I introduced DisposableEnumeratorAdapter. So we have adapter structs for both cases: disposable and not disposable. Since C# doesn't allow overloads of methods that vary only on generic type argument constraints, this requires that the caller of the extension methods call the right method for their struct type. I've put a constraint on one method and a debug.assert on the other method to help flow callers into the right buckets and verified that a mistake produces either a compile error or a test failure.

I stop short of actually opting ImmutableArray<T> into the pattern (in this commit anyway) because it caused test failures since the types of exceptions thrown from uninitialized ImmutableArray<T> structs changed (due to calling a different GetEnumerator method).
Apply enumeration enhancement to ImmutableSortedSet<T>
Apply enum pattern to ImmutableList<T>

It turns out it only applies in one place. But as it is RemoveRange and if it has an empty list as an argument we'd like it to be fast, it seems worthwhile.
Remove Xunit nuget package references from Tests.props
Merge pull request #223 from AArnott/fix211

Avoid boxing ImmutableHashSet<T>.Enumerator and others
Added System.Text.RegularExpressions source
Fix some XML comments