Improve performance of Regex ctor and IsMatch

The Regex class maintains a cache of byte codes, which the Regex ctor indexes into using a key.  It uses this seemingly innocuous line to create that key:

String key = ((int)options).ToString(NumberFormatInfo.InvariantInfo) + ":" + cultureKey + ":" + pattern;

This, however, has the unfortunate effect of allocating a string for the options, a string array for the five strings to be passed to the String.Concat call generated by the compiler, another string array allocation inside of Concat, and then the resulting string for the whole operation.  The cost of those allocations is causing a non-trivial slowdown for repeated Regex.IsMatch calls for simple regular expressions, such as for a phone number (e.g. "^\\d{3}-\\d{3}-\\d{4}$").

This commit adds a new struct key type that just stores the constitutent options, cultureKey, and pattern, rather than creating a string to store them.  That key is then what's stored in each entry in the cache.

For repeated Regex.IsMatch calls for basic regular expressions like the phone number one previously mentioned, on my machine this improves throughput by ~35%, in large part due to ~80% reduction in number of allocations, and (for this particular test case) an ~70% reduction in number of bytes allocated (it depends primarily on the length of the pattern and the length of the culture name).
Add Jenkins CI badges
Remove superfluous ToLowerInvariant helper
Merge pull request #236 from alfaproject/tolowerinvariant

Remove superfluous ToLowerInvariant helper
Remove extra space
Merge pull request #231 from stephentoub/regex_ctor_perf

Improve performance of Regex ctor and IsMatch
Merge pull request #232 from mmitche/jci

Add Jenkins CI badges
Initial commit Microsoft.Win32.Primitives
Initial commit Microsoft.Win32.Registry
Merge branch 'registry'
Update README.md
Fix multiple projects for optimizations, debug/trace, etc.

System.Linq.Parallel.csproj wasn't outputting symbols, and it didn't have optimizations enabled in Release.

System.Numerics.Vectors.csproj was setting TRACE in Release builds but not in Debug builds.

System.Text.RegularExpressions.csproj wasn't setting either DEBUG nor RELEASE constants in either Debug/Release builds, it didn't have optimizations enabled in Release, and it wasn't generating symbols in either.

The XML libraries were't setting DEBUG/TRACE in either Debug/Release builds, weren't enabling optimizations in Release builds, and weren't generating symbols in either.

DEBUG is important in almost all of these libraries, as they use Debug.* for asserts and the like.  Symbol generation is important for debugging.  Optimizations are obviously important (but just to verify I saw significant performance wins in multiple libraries just from turning this on in release).  TRACE isn't really important, as none of the libraries do release tracing, but I thought it good hygiene to enable it.
Implement Microsoft.Win32.Primitives support on Linux

Separates out the Windows interop code from the main Win32Exception type, and then adds a basic Linux implementation, based on strerror_r. (There are a few other minor, unrelated changes, e.g. some additional enum values in an interop file, in order to keep these files in sync with additional .NET Core projects not yet shared.)
Merge pull request #241 from stephentoub/fix_project_settings

Fix multiple projects for optimizations, debug/trace, etc.
Merge pull request #242 from stephentoub/win32_primitives_unix

Implement Microsoft.Win32.Primitives support on Linux