Further reduce JVM-ness of ThreadPoolScheduler.

With this, the use of AtomicInteger is eliminated in favor of a lock
(for now; we can do better in the future when we've atomic ops). The
timer related bits are still JVM-specific, but now conditionally built
for the JVM, and we just throw an exception on Moar. Means we can use
the non-timer bits of the scheduler on Moar initially.