Fixed the Com threading issue

Because of the  WASAPI COM devices being STA only, any cross thread
reference to these objects was causing random null references.

There is now ONE thread in which all COM Devices are created and
accessed on, to access COM specific fields, the ComThread must be used
Hence the ComThread.Invoke() everywhere.

I have added a BeginInvoke for ASYNC programming in .NET 4.5. It also
allows for Task.ContinueWith to be used in an asynchronous manner.