Refactor to poll and fire when condition is true.
Simplifies code a great deal and avoids all the issues which have repetitively been seen in attempts to determine the next running time.
This includes all the issues which were seen with using loops to look forward in time.
Originally posted by @mryellow in #962