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.
KeyPairPresistence now tries to fix folder permissions.
An exception is no longer thrown if the folder permissions can be fixed.
Fixes bug 19274.
Fix scrolling in SWF.ListView.EnsureVisible(int index)

This fixes https://bugzilla.xamarin.com/show_bug.cgi?id=22483
[mdoc] New make test for the --dropns functionality
[mdoc] New make test, reproduces issue with --dropns when run with a secondary assembly that doesn't drop the specified namespace
[mdoc] added -dropns-assemblies parameter.
Will now only replace the namespace when the type or member is in a listed assembly
[mdoc] Formatting feedback from pull #1273
[mdoc] consolidated dropns and dropns-assemblies into a single parameter.

Based on pull request feedback, this is a simpler usage, and meets our required use-case. A sample version of this parameter would be: `--dropns MyUnifiedAssembly=MyDroppedPrefix`
Missing setting disposed to true
Missing Args checks.
[System] Add performanceCounters element to System.Diagnostics app.config configuration section

See http://msdn.microsoft.com/en-us/library/ms229387(v=vs.110).aspx for details about the element.
The value that is set by the element isn't currently used in Mono, but applications using it in their app.config crash otherwise (e.g. http://stackoverflow.com/questions/25741651).
[aot] Use gsharedvt for collection types instantiated with generic structs as well.
[xbuild] More tweaks to tool path setup
[runtime] Fix an assert in w32_dlerror () on winx64.
[arm64] Increase some opcode sizes. Fixes #23026.
[runtime] Add support for setting the thread name on windows. On windows, this will only work when running under a debugger.
[runtime] Fix the my_g_bit_nth_msf () function for win64.
[runtime] Disable VS warnings C4273 (inconsistent dll linkage), and C4005 (macro redefinition). The former occurs becase we mark exported function declarations using MONO_API, but not the definitions. The latter occurs because we define _WINSOCKAPI_.
[mcs] struct parameterless instance constructors