This reduces lock contention in NoThreadScheduler
This is done by having two queues, one for immediate execution, and one for scheduled/recurring tasks.
We can not handle scheduleAtFixedRate with a period of zero any more with this change, because we have to compare both queues to see which task we want to run.  With a period of zero, that task will ALWAYS be the front of the queue.