Improvments for scheduling on a limited sub pool.

This provides performance improvments for scheduled (and recurring) tasks by attempting to run on the delayed runnable thread, and only queuing if forced to do so.  Previously this would always due the worst case situation and queue after the delay has expired.

This commit also reduces code duplication by allowing the PrioritySchedulerLimiter extending from the SchedulerLimiter.

I also expanded and improved the unit test code, to make sure we get full coverage.

I will add line comments for the interesting changes.