Removed the option to create a "non-thread safe" NoThreadScheduler.  The overhead of synchronizing is probably not a big deal if there is no lock contention, and this makes our unit tests and code quite a bit smaller and simpler.
In addition I improved the remove functionality to use the same remove logic that the PriorityScheduledExecutor was using (and thus traverse the containers if they exist)
More love for the NoThreadScheduler, better error checking to match the other schedulers.  Also added a unit tests, and fixed a bug where recurring tasks could not be removed while they were running.