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.
I don't particularly like this assert statement, I'm pretty sure it's possible for a rounding error to trigger it. It might be better to change it into an if and print a warning in the else, or something.