Add DeviceConfig and OncePer objects

Add DeviceConfig to store per-device configuration information.  Put a
OncePer object inside Config and DeviceConfig, which computes a value
once per key per object to allow build logic to store arbitrary
per-build or per-device computed values.

Change-Id: I1a38b426f29d223ef5e803e0d4d9604500de2fd2
diff --git a/android/arch.go b/android/arch.go
index 2d4ad2e..2d38daf 100644
--- a/android/arch.go
+++ b/android/arch.go
@@ -717,7 +717,7 @@
 }
 
 // Convert the arch product variables into a list of targets for each os class structs
-func decodeTargetProductVariables(config Config) (map[OsClass][]Target, error) {
+func decodeTargetProductVariables(config *config) (map[OsClass][]Target, error) {
 	variables := config.ProductVariables
 
 	targets := make(map[OsClass][]Target)