buffet: Add device state manager

Added StateManager class to buffet and all the internals to
load vendor-provided state definition fragments, apply state
property defaults, expose the state property values over D-Bus
to be updated by daemons (using Buffet.UpdateState method) and
sent the current device state to GCD server as part of device
draft provided during device registration.

BUG=chromium:415364
TEST=FEATURES=test emerge-link buffet

Change-Id: I78e470c98d906064dfbe925614613ee6a91ff3cf
Reviewed-on: https://chromium-review.googlesource.com/218743
Tested-by: Alex Vakulenko <avakulenko@chromium.org>
Reviewed-by: Christopher Wiley <wiley@chromium.org>
Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/buffet/utils.h b/buffet/utils.h
index e71560c..a776e0c 100644
--- a/buffet/utils.h
+++ b/buffet/utils.h
@@ -13,8 +13,18 @@
 
 namespace buffet {
 
+// Buffet-wide errors.
+// TODO(avakulenko): This should be consolidated into errors::<domain> namespace
+// See crbug.com/417274
 extern const char kErrorDomainBuffet[];
 extern const char kFileReadError[];
+extern const char kInvalidCategoryError[];
+extern const char kInvalidPackageError[];
+
+// kDefaultCategory represents a default state property category for standard
+// properties from "base" package which are provided by buffet and not any of
+// the daemons running on the device.
+const char kDefaultCategory[] = "";
 
 // Helper function to load a JSON file that is expected to be
 // an object/dictionary. In case of error, returns empty unique ptr and fills