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.
To avoid committing test code use:

```Rust
<newline>
// TEST
assert!(...)
<newline>
```

Then remove them before committing.