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.)