ioloop: Fix PeriodicCallback when system clock moves backwards
If the clock moves backwards a little bit, we could run a
PeriodicCallback twice in a row prior to this change.
Due to implementation differences between the Tornado and asyncio
event loops, this is most common when using the asyncio event loop on
windows (where in some environments differences between time.time()
and time.monotonic() can result in behavior that looks like small
backwards time jumps on every iteration), although it can in principle
occur in any environment.