Use monotonic time for events

This avoids possible problems when wall-clock time is adjusted. Also, it's needed on x86 because monotonic time and wall-clock time aren't the same.

I noticed this in the trace viewer; sleeps of < 100ms were taking exactly 100ms. The reason is that we asked to sleep for much too long, but the 100ms timer interrupt would wake us up anyway.

Will add change log entry when other PRs have been applied, or we'll just get conflicts.