intersperse updates and frames more precisely

For https://github.com/PistonDevelopers/piston/issues/522

Please inspect closely; I changed some subtle things, like when we check time and where variables are set, so I may have had some unintended side effects.
In this specific case, not having a check means a rounding error could theoretically make us `sleep` for a very long time.

I also like having some sort of reminder that this needs to be true, even ignoring rounding errors. It warns people modifying the code in the future to not violate the condition. I would have suggested a `debug_assert` if not for rounding errors.