Make starter client & server work across nodes

So that we can readily start on one node from another node, add in logic
to make it so that starterd will listen to StarterRpc calls from any
available other nodes. Add a StarterClient class that then supports
interacting across nodes.

Also updates the aos_starter command line utility with --node and
--all_nodes flags to support this.

Change-Id: I234b08b3a3a836966f117f55b9e6a321d2b2ff6c
Signed-off-by: James Kuszmaul <james.kuszmaul@bluerivertech.com>
diff --git a/aos/starter/starterd_lib.h b/aos/starter/starterd_lib.h
index b5888e0..1809326 100644
--- a/aos/starter/starterd_lib.h
+++ b/aos/starter/starterd_lib.h
@@ -159,6 +159,11 @@
   DISALLOW_COPY_AND_ASSIGN(SignalListener);
 };
 
+const aos::Channel *StatusChannelForNode(const aos::Configuration *config,
+                                         const aos::Node *node);
+const aos::Channel *StarterRpcChannelForNode(const aos::Configuration *config,
+                                             const aos::Node *node);
+
 class Starter {
  public:
   Starter(const aos::Configuration *event_loop_config);
@@ -180,6 +185,7 @@
       SIGSEGV, SIGPIPE, SIGTERM, SIGBUS, SIGXCPU};
 
   void OnSignal(signalfd_siginfo signal);
+  void HandleStarterRpc(const StarterRpc &command);
 
   // Sends the Status message if it wouldn't exceed the rate limit.
   void MaybeSendStatus();