I'm concerned with the abstract always using the `SleepingAction` because that is synchronous and always invokes Thread.sleep.

Wouldn't we only want Thread.sleep on the ImmediateScheduler but on all others want to use a ScheduledExecutor (or whatever a given Scheduler implementation prefers ... but not Thread.sleep unless it is synchronous).