Improve COM error handling

Improve COM error handling by converting COM error codes to C# exceptions, and using a managed exception that got passed through a COM object.

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).
This parameter name change also breaks compatibility with .NET; the [`IntPtr` parameter *should* be `errorInfo`](http://msdn.microsoft.com/en-us/library/3xade62s(v=vs.100).aspx), as it was before:

	public static Exception GetExceptionForHR(
		int errorCode,
		IntPtr errorInfo
	)

Changing the parameter will break users of C#4 named parameters.