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