Use generics for providers API

Using generics for the providers API allows a type to be associated
with a ProviderKey, resulting in a type-safe API without that doesn't
require runtime type assertions by every caller.

Unfortunately, Go does not allow generic types in methods, only in
functions [1].  This prevents a type-safe API on ModuleContext, and
requires moving the API to be functions that take a ModuleContext as
a parameter.

This CL creates the new API, but doesn't convert all of the callers.

[1] https://go.googlesource.com/proposal/+/refs/heads/master/design/43651-type-parameters.md#no-parameterized-methods)

Bug: 316410648
Test: builds
Change-Id: I3e30d68b966b730efd968166a38a25cc144bd6de
diff --git a/java/classpath_element.go b/java/classpath_element.go
index 4962916..af99fb4 100644
--- a/java/classpath_element.go
+++ b/java/classpath_element.go
@@ -72,8 +72,8 @@
 
 // ClasspathElementContext defines the context methods needed by CreateClasspathElements
 type ClasspathElementContext interface {
-	OtherModuleHasProvider(m blueprint.Module, provider blueprint.ProviderKey) bool
-	OtherModuleProvider(m blueprint.Module, provider blueprint.ProviderKey) interface{}
+	OtherModuleHasProvider(m blueprint.Module, provider blueprint.AnyProviderKey) bool
+	OtherModuleProvider(m blueprint.Module, provider blueprint.AnyProviderKey) interface{}
 	ModuleErrorf(fmt string, args ...interface{})
 }