Move towards being pure GCD with no reliance on CFRunloop. Migrated async, execution is on whatever default priority queue is available instead of always being on main queue.