If an CDEAsynchronousTaskQueue is being run on the main thread, we no longer spin the run loop. We only do that on background threads.
Flattened the nesting in the mergeWithCompletion: method by adopting a CDEAsynchronousTaskQueue.