Make *Context.Config return a Config instead of a interface{}

In Soong, a Config() method will always return a Config.  Make
ModuleContext, SingletonContext, TopDownMutatorContext and
BottomUpMutatorContext's Config() methods explictly return
a Config to avoid having to type-assert everywhere.  Overriding
the Config method requires duplicating the list of methods in
blueprint.BaseModuleContext and blueprint.BottomUpMutatorContext,
following the same pattern used by the other *Contexts.

Config() obsoletes the AConfig() method used in some places, which
will be cleaned up in the next patch.

Test: m checkbuild
Change-Id: Ibe21efde933959811d52443496967ab8ce71215e
diff --git a/java/app.go b/java/app.go
index fd1fe33..1560be6 100644
--- a/java/app.go
+++ b/java/app.go
@@ -338,7 +338,7 @@
 
 func (overlaySingleton) GenerateBuildActions(ctx android.SingletonContext) {
 	var overlayData []overlayGlobResult
-	for _, overlay := range ctx.Config().(android.Config).ResourceOverlays() {
+	for _, overlay := range ctx.Config().ResourceOverlays() {
 		var result overlayGlobResult
 		result.dir = overlay
 		files, err := ctx.GlobWithDeps(filepath.Join(overlay, "**/*"), aaptIgnoreFilenames)
@@ -359,7 +359,7 @@
 		overlayData = append(overlayData, result)
 	}
 
-	ctx.Config().(android.Config).Once(overlayDataKey, func() interface{} {
+	ctx.Config().Once(overlayDataKey, func() interface{} {
 		return overlayData
 	})
 }