Implement simulated FetchNext and fix its behavior

Simulation was missing FetchNext, so let's add that.  And since this is
core infrastructure, add tests.

These tests caught that ShmEventLoop was fetching messages sent before
the fetcher was constructed.  This behavior is confusing and wrong.  So
fix it.

Change-Id: I03c79731688a150e30ba871dee13b7c9c68e75b7
diff --git a/aos/events/event-loop.h b/aos/events/event-loop.h
index a605cf2..bedf9a5 100644
--- a/aos/events/event-loop.h
+++ b/aos/events/event-loop.h
@@ -13,9 +13,12 @@
 class Fetcher {
  public:
   Fetcher() {}
-  // Fetches the next message. Returns whether it fetched a new message.
+  // Fetches the next message. Returns true if it fetched a new message.  This
+  // method will only return messages sent after the Fetcher was created.
   bool FetchNext() { return fetcher_->FetchNext(); }
-  // Fetches the most recent message. Returns whether it fetched a new message.
+  // Fetches the most recent message. Returns true if it fetched a new message.
+  // This will return the latest message regardless of if it was sent before or
+  // after the fetcher was created.
   bool Fetch() { return fetcher_->Fetch(); }
 
   const T *get() const {