Make Hardware class platform specific.

The Hardware class abstracts the interaction with the actual hardware
which is inherently platform-specific. This patch implementes a stub
version for Android and moves the Chromium OS implementation, handling
both with the same public factory method.

Bug: 23084776
TEST=emerge-link update_engine; `mma -i` builds the stubs.

Change-Id: I19c791a2e3fa22f0ac38bbe68a9c47838bcf019a
diff --git a/real_system_state.h b/real_system_state.h
index 31cf4da..5797d18 100644
--- a/real_system_state.h
+++ b/real_system_state.h
@@ -30,7 +30,7 @@
 #include "update_engine/boot_control_interface.h"
 #include "update_engine/clock.h"
 #include "update_engine/connection_manager.h"
-#include "update_engine/hardware.h"
+#include "update_engine/hardware_interface.h"
 #include "update_engine/p2p_manager.h"
 #include "update_engine/payload_state.h"
 #include "update_engine/prefs.h"
@@ -71,7 +71,7 @@
     return &connection_manager_;
   }
 
-  inline HardwareInterface* hardware() override { return &hardware_; }
+  inline HardwareInterface* hardware() override { return hardware_.get(); }
 
   inline MetricsLibraryInterface* metrics_lib() override {
     return &metrics_lib_;
@@ -130,7 +130,7 @@
   ConnectionManager connection_manager_{&shill_proxy_, this};
 
   // Interface for the hardware functions.
-  Hardware hardware_;
+  std::unique_ptr<HardwareInterface> hardware_;
 
   // The Metrics Library interface for reporting UMA stats.
   MetricsLibrary metrics_lib_;