de3ca2b2ef
Consolidate warnings and interval scheduling in doWarning(). Don't let the reboot time drift because of delays on the RunQueue.. each warning is scheduled based on absolute time from _nextReboot. doWarning() now takes two args so any subclasses that had overridden it (unlikley beyond PX) will break... PendingShutdownObservers will now get the actual milliseconds until reboot. Basically: after all this, things should essentially work the same except now there is a protected three-arg version of scheduleReboot that lets you schedule an exact time, bypassing the normal round-up to the next highest warning time.