Scanning/Threading fixes

Here's another attempt at fixing the problem.

I have reverted @skurfer's fix, and gone back to my original fix. This time, however, I am checking to make sure we're not already on the `scanQueue` before dispatching a block to it. If we are, then we just dispatch the block (as we're on the `scanQueue`)

The changes made to QSTask.m are to ensure that KVO iVars are changed on the main thread, which of course [must be done](http://www.cocoabuilder.com/archive/cocoa/212677-kvo-notifications-and-threads.html) for UI things

The new QSGCD class takes care of checking Queues/threads etc. The basis of it is something I've [previously discussed](https://github.com/quicksilver/Quicksilver/pull/1313#issuecomment-11999797) with @skurfer (and is [discussed here](http://stackoverflow.com/questions/5662360/gcd-to-perform-task-in-main-thread)). If/when this is merged, I'll revert 98a7a03716ab8bfe67082474723a859f9174902e and use the new `runOnMainQueueSync` thread I've created