Redo timer math for spurrious events

The timer event sometimes comes late and causes a bunch of issues.  Do
all the expired timer math ourselves instead.

Change-Id: Ie6b438140dc16e1eb9aede3b4f0265f3ae725343
diff --git a/aos/events/event_loop.h b/aos/events/event_loop.h
index 6047cbc..d0ca196 100644
--- a/aos/events/event_loop.h
+++ b/aos/events/event_loop.h
@@ -344,8 +344,9 @@
  protected:
   TimerHandler(EventLoop *event_loop, std::function<void()> fn);
 
-  void Call(std::function<monotonic_clock::time_point()> get_time,
-            monotonic_clock::time_point event_time);
+  monotonic_clock::time_point Call(
+      std::function<monotonic_clock::time_point()> get_time,
+      monotonic_clock::time_point event_time);
 
  private:
   friend class EventLoop;