dut: Add DUT-aware 'SystemStatus' component to replace state.SystemStatus

The 'cros.factory.system.state' module provides two objects: SystemInfo and
SystemStatus and we should migrate them into new DUT API. This change migrates
SystemStatus into cros.factory.test.dut.status. SystemInfo will be moved on its
own change set.

Previously the SystemStatus was made as an object with collected static values.
This has some disadvantages including:
 - We can't just read one value. Always need to refresh all.
 - Hard to make "live status".
 - The retrieval is implicitly done when the object is created.
 - Some tricks were made by setting class variable for overriding values.

So in new implementation we changed the SystemStatus into a DUTComponent that
all information can be retrieved individually as property. So that:
 - Use self.dut.status.XXX when you need single status. It's probed immediately.
 - Use self.dut.status.Snapshot() gives you an object with all known properties
   with values fixed, just like before. To get a dictionary like info.GetAll(),
   use status.Snapshot().__dict__.
 - Use self.dut.status.Overrides(name, value) to override a value.

BUG=chromium:557573
TEST=make test

Change-Id: I694d57f1035f8ba1d88523353067108aaac88631
Reviewed-on: https://chromium-review.googlesource.com/318395
Commit-Ready: Hung-Te Lin <hungte@chromium.org>
Tested-by: Hung-Te Lin <hungte@chromium.org>
Reviewed-by: Hung-Te Lin <hungte@chromium.org>
diff --git a/py/goofy/goofy.py b/py/goofy/goofy.py
index 6d588d0..ac3dc26 100755
--- a/py/goofy/goofy.py
+++ b/py/goofy/goofy.py
@@ -1551,7 +1551,7 @@
           self.test_list.options.min_charge_pct is not None):
       self.charge_manager = ChargeManager(self.test_list.options.min_charge_pct,
                                           self.test_list.options.max_charge_pct)
-      system.state.SystemStatus.charge_manager = self.charge_manager
+      self.dut.status.Overrides('charge_manager', self.charge_manager)
     else:
       # Goofy should set charger state to charge if charge_manager is disabled.
       self.charge()