Report a root cause in BEP on testonly violations

Also move the VisibilityErrorEvent to the analysis package and rename
it. Improve its documentation to clarify the intended use.

This fixes the immediate issue, but does not address the underlying
problem. The problem is that root cause analysis is incomplete, and
reporting is disconnected. When we report the analysis failure of a
target, we implicitly create a AnalysisFailedCause pointing at a root
cause event, and hope that something else will post that. However,
there's no guarantee that that ever happens, in which case we trigger a
fail-safe in the BEP implementation, which posts an empty event and
marks it as 'aborted' with no further explanation.

We need to guarantee that we only report a root cause if there's a
corresponding root cause event. The best way to do that is to collect
the root cause events as causes, rather than creating a cause out of
thin air.

Common:
event {
id {
  target_completed {
    label: "//foo:foo"
    configuration {
      id: "b724944fdc6e8d9ab550b4b88f79644e"
    }
  }
}
children {
  configured_label {
    label: "//foo:foo"
    configuration {
      id: "b724944fdc6e8d9ab550b4b88f79644e"
    }
  }
}
aborted {
  reason: ANALYSIS_FAILURE
}
}

Reported root cause before:
event {
id {
  configured_label {
    label: "//foo:foo"
    configuration {
      id: "b724944fdc6e8d9ab550b4b88f79644e"
    }
  }
}
aborted {
}
}

Reported root cause after:
event {
id {
  configured_label {
    label: "//foo:foo"
    configuration {
      id: "b724944fdc6e8d9ab550b4b88f79644e"
    }
  }
}
aborted {
  reason: ANALYSIS_FAILURE
  description: "non-test target \'//foo:foo\' depends on testonly target \'//foo:bar\' and doesn\'t have testonly attribute set"
}
}

PiperOrigin-RevId: 268003026
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisFailureEvent.java b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisFailureEvent.java
index 05860cb..99739e0 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/AnalysisFailureEvent.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/AnalysisFailureEvent.java
@@ -30,8 +30,8 @@
 import javax.annotation.Nullable;
 
 /**
- * This event is fired during the build, when it becomes known that the analysis of a target cannot
- * be completed because of an error in one of its dependencies.
+ * This event is fired during the build, when it becomes known that the analysis of a top-level
+ * target cannot be completed because of an error in one of its dependencies.
  */
 public class AnalysisFailureEvent implements BuildEvent {
   private final ConfiguredTargetKey failedTarget;