Use an event loop for events, reports and timers.

This also means:

- Report action handlers are now event based
- Mouse emits are now using a real timer not affected
  by report latency