Refactor cc modules to use decorators instead of inheritance

For example , instead of trying to have libraryLinker inherit from
baseLinker and libraryCompiler inherit from baseCompiler, create a
single decorator object that wraps both baseLinker and baseCompiler.

Test: Builds, no unexpected changes to build.ninja
Change-Id: I2468adaea8466c203a240259ba5694b8b1df7a52
diff --git a/cc/compiler.go b/cc/compiler.go
index 0182491..4a7bba9 100644
--- a/cc/compiler.go
+++ b/cc/compiler.go
@@ -89,6 +89,10 @@
 	} `android:"arch_variant"`
 }
 
+func NewBaseCompiler() *baseCompiler {
+	return &baseCompiler{}
+}
+
 type baseCompiler struct {
 	Properties BaseCompilerProperties
 }
@@ -311,7 +315,7 @@
 	pathDeps := deps.GeneratedHeaders
 	pathDeps = append(pathDeps, ndkPathDeps(ctx)...)
 	// Compile files listed in c.Properties.Srcs into objects
-	objFiles := compiler.compileObjs(ctx, flags, "",
+	objFiles := compileObjs(ctx, flags, "",
 		compiler.Properties.Srcs, compiler.Properties.Exclude_srcs,
 		deps.GeneratedSources, pathDeps)
 
@@ -323,7 +327,7 @@
 }
 
 // Compile a list of source files into objects a specified subdirectory
-func (compiler *baseCompiler) compileObjs(ctx android.ModuleContext, flags Flags,
+func compileObjs(ctx android.ModuleContext, flags Flags,
 	subdir string, srcFiles, excludes []string, extraSrcs, deps android.Paths) android.Paths {
 
 	buildFlags := flagsToBuilderFlags(flags)