Add OtherModuleName and OtherModuleErrorf to mutators

TopDownMutators can visit dependencies, provide OtherModuleName and
OtherModuleErrorf so they can query and report errors on those
dependencies.
diff --git a/module_ctx.go b/module_ctx.go
index 7af26d2..c23c669 100644
--- a/module_ctx.go
+++ b/module_ctx.go
@@ -344,6 +344,9 @@
 type TopDownMutatorContext interface {
 	baseMutatorContext
 
+	OtherModuleName(m Module) string
+	OtherModuleErrorf(m Module, fmt string, args ...interface{})
+
 	VisitDirectDeps(visit func(Module))
 	VisitDirectDepsIf(pred func(Module) bool, visit func(Module))
 	VisitDepsDepthFirst(visit func(Module))
@@ -488,6 +491,21 @@
 	}
 }
 
+func (mctx *mutatorContext) OtherModuleName(logicModule Module) string {
+	module := mctx.context.moduleInfo[logicModule]
+	return module.properties.Name
+}
+
+func (mctx *mutatorContext) OtherModuleErrorf(logicModule Module, format string,
+	args ...interface{}) {
+
+	module := mctx.context.moduleInfo[logicModule]
+	mctx.errs = append(mctx.errs, &Error{
+		Err: fmt.Errorf(format, args...),
+		Pos: module.pos,
+	})
+}
+
 func (mctx *mutatorContext) VisitDirectDeps(visit func(Module)) {
 	mctx.context.visitDirectDeps(mctx.module, visit)
 }