Support product variables

Allow modules to vary their properties based on product variables.
For now, DEVICE_USES_LOGD, DEVICE_USES_JEMALLOC, and DEVICE_USES_DLMALLOC,
and BOARD_MALLOC_ALIGNMENT are supported.

Product variables can provide a value (only bool and int supported for
now), and if any of the product variable properties contains a "%d"
then Sprintf will be called with the property value as the format
and the product variable value convert to an int as the only argument.

For example:

    product_variables: {
        dlmalloc_alignment: {
            cflags: ["-DMALLOC_ALIGNMENT=%d"],
        },
    },

will cause -DMALLOC_ALIGNMENT=16 to be added to any top level
properties called "cflags".

Change-Id: I74882a6ab4914d3e222f8d06cfac371b7b829ae5
diff --git a/common/module.go b/common/module.go
index e8c4a87..feaba83 100644
--- a/common/module.go
+++ b/common/module.go
@@ -125,7 +125,7 @@
 	base.module = m
 	base.extendedProperties = make(map[string]struct{})
 
-	propertyStructs = append(propertyStructs, &base.commonProperties)
+	propertyStructs = append(propertyStructs, &base.commonProperties, &base.variableProperties)
 
 	return m, propertyStructs
 }
@@ -194,6 +194,7 @@
 	module AndroidModule
 
 	commonProperties        commonProperties
+	variableProperties      variableProperties
 	hostAndDeviceProperties hostAndDeviceProperties
 	generalProperties       []interface{}
 	archProperties          []*archProperties