Properly convert COM error codes to C# exceptions

Also use additional information provided by IErrorInfo to fill in
exception details.

To make use of IErrorInfo on Linux a suitable implementation has to be
provided, e.g. by including libcom plus adding a mapping from
oleauth32.dll to the shared library that provides the implementation.

This completes mono bug 496138
(https://bugzilla.novell.com/show_bug.cgi?id=496138)
Set ErrorInfo in Marshal.GetHRForException

Marshal.GetHRForException had a MonoTODO because it needs to set
the errorinfo object so that exceptions get properly passed to
unmanaged code. Since not all managed exceptions have a corresponding
HR value but we might need to get to the original thrown exception
we implement a ManagedErrorInfo helper class that implements the
IErrorInfo interface but also stores the exception.

In GetExceptionForHR we check if the errorinfo we get is a
ManagedErrorInfo. If it is we return the exception stored in there
(if it converts to the same error code), otherwise we construct a new
exception.
[MWF] Partially implement Help.ShowHelp
KeyPairPresistence now tries to fix folder permissions.
An exception is no longer thrown if the folder permissions can be fixed.
Fixes bug 19274.
Missing setting disposed to true
Missing Args checks.
Added System.IdentityModel.Tokens.BootstrapContext including tests.
[aot] Add more verbose aot cache logging, fix failure detection.
[aot] Add an 'options' argument to the AOT cache configuration where additional --aot= options can be passed.
Test Uri.UserInfo with escaped 'a'.
Fixed additional Uri.UserInfo char consumed after an escaped char.
Test Uri.UserInfo with percentage encoded '@'.
UriParseComponents no longer decodes '@' in UserInfo. Fixes 23246.
Merge pull request #1203 from esdrubal/protect

KeyPairPresistence now tries to fix folder permissions.
Test that Uri made from UNIX path and RelativeOrAbsolute is relative.
Uri made from UNIX path and RelativeOrAbsolute is now relative.
Fixes 22954.
Merge pull request #1300 from esdrubal/unixrelativeorabsolute

Uri made from UNIX path and RelativeOrAbsolute is now relative.
Test WebClient.UploadFileTaskAsync ContentType. Covers 19529.
Fix warnings in mscorlib's Test suite + bring a couple more tests + fix thread rename test
Fix Win32 call in IsUserProtected. Usage was incorrect and freeing the wrong parameter causing a memory corruption.