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
Test WebClient.UploadFileTaskAsync ContentType. Covers 19529.
Test connection reuse.
Allow stream reuse when InputStream has been disposed.
If InputStream is disposed FlushInput now sets it to null so a new one can be created.
TimeZoneInfo is now always present in corlib.
Prior to net_4_0 TimeZoneInfo is a private class.
CurrentSystemTimeZone.GetUtcOffset now supports multiple DST periods.
DateTime.Now was returning wrong values when system TimeZone had more than one daylight saving time.
Fixes 22648.
Removed unused CurrentSystemTimeZone fields and methods.
Updated TimeZoneInfoTest.DSTTransisions to correct .NET behavior.
Test TimeZoneInfo.GetUtcOffset with multiple DST and DateTimeKind.
Simplified TimeZone.ToLocalTime.
Old code was producing invalid DST dates.
ConvertTimeToUtc no longer relies in DateTime.ToUniversalTime.
Removed repeated logic from TimeZoneInfo.ConvertTimeToUtc.
Created helper method TimeZoneInfo.IsInDST.
TimeZoneInfo.GetUtcOffset now handles all DateTimeKinds.
Removed GetUtcOffset cohesion with TimeZoneInfo.IsDaylightSavingTime.
TimeZoneInfo.IsDaylightSavingTime now uses GetUtcOffset.
Refactored TimeZoneInfo.GetUtcOffset.
Added GetUtcOffset auxiliar methods with bool out parameter that is true when the given DateTime is a DST.
Use TZ transitions when AdjustementRules are ignored. Fixes 23170.
In some cases the timezone transitions provided by iOS are not convertible to AdjustmentRules because of changes on the base offset.
Now we store the transitions so they can be used instead of an incomplete list of AdjustmentRules.
Added bash script to test DateTime.Now.
The test changes TZ environment variable and compares DateTime.Now with system date.
The test checks all the timezones installed in /usr/share/zoneinfo/.