Add explicitlyImpl to shared library dependency tags

Instead of testing that explicit implementation libraries are not
incorrectly used in an apex after the fact add the explicitlyImpl
flag to dependency tags and use it in cc.DepIsInSameApex and
rust.DepIsInSameApex to require that explicit implementation
dependencies are in the same apex.

Bug: 372543712
Test: go test ./...
Change-Id: Ia968e06b578d5ab886a965c3981565d4895dddcd
diff --git a/rust/rust.go b/rust/rust.go
index c0df9f3..88918cf 100644
--- a/rust/rust.go
+++ b/rust/rust.go
@@ -2085,7 +2085,7 @@
 	}
 
 	if mod.HasStubsVariants() {
-		if cc.IsSharedDepTag(depTag) {
+		if cc.IsSharedDepTag(depTag) && !cc.IsExplicitImplSharedDepTag(depTag) {
 			// dynamic dep to a stubs lib crosses APEX boundary
 			return false
 		}