Remove Config interface

Replace the Config interface with a struct that wraps the real
*config object.  This keeps the existing pointer behavior without
having to list all of the available config functions in the interface.

Change-Id: If55a622b5a112ca5dc7193ebd59f2931b3a8e6cd
diff --git a/common/config.go b/common/config.go
index 695e27d..a6837c1 100644
--- a/common/config.go
+++ b/common/config.go
@@ -22,19 +22,6 @@
 	"runtime"
 )
 
-type Config interface {
-	CpPreserveSymlinksFlags() string
-	SrcDir() string
-	IntermediatesDir() string
-	Getenv(string) string
-	EnvDeps() map[string]string
-	DeviceOut() string
-	HostOut() string
-	PrebuiltOS() string
-	HostBinTool(string) (string, error)
-	HostJavaTool(string) (string, error)
-}
-
 // The configuration file name
 const ConfigFileName = "soong.config"
 
@@ -48,7 +35,11 @@
 	return f
 }
 
-// A Config object represents the entire build configuration for Blue.
+type Config struct {
+	*config
+}
+
+// A config object represents the entire build configuration for Blue.
 type config struct {
 	FileConfigurableOptions
 
@@ -115,15 +106,17 @@
 // the root source directory. It also loads the config file, if found.
 func NewConfig(srcDir string) (Config, error) {
 	// Make a config with default options
-	config := &config{
-		srcDir:  srcDir,
-		envDeps: make(map[string]string),
+	config := Config{
+		config: &config{
+			srcDir:  srcDir,
+			envDeps: make(map[string]string),
+		},
 	}
 
 	// Load any configurable options from the configuration file
-	err := loadFromConfigFile(config)
+	err := loadFromConfigFile(config.config)
 	if err != nil {
-		return nil, err
+		return Config{}, err
 	}
 
 	return config, nil