Remove PhClock::tick and use PhClock::elapse instead

Now PhClock only manipulates integers. The possible floating-point
errors are the responsibility of the callers.
Update the clock with a QElapsedTimer instead of the screen refresh period

This fixes two situations where Joker clock can drift:
- if V-sync is not enabled (hard to control on Windows)
- if some frames are dropped (and some will inevitably)