Make sure to wait for all subprocesses in the process-wrapper.

This is take 3 of https://github.com/bazelbuild/bazel/commit/7828118ea8f4150aa1eae4ab3133935ffe221eb5 and then https://github.com/bazelbuild/bazel/commit/9c1853aa2fe49cf80dd467bb4020eb0822d53881, both of which
required a Bazel release rollback due to unforeseen problems (the
latter of which caused some tests to never complete).

This CL is an identical repeat of https://github.com/bazelbuild/bazel/commit/9c1853aa2fe49cf80dd467bb4020eb0822d53881, the only difference
being that the changes to the process-wrapper are now gated behind
a flag to allow us to roll them out in a controlled manner.  Therefore,
this is *still broken* in the same way that caused the second rollback,
but I feel more comfortable addressing that bug separately from this
roll forward (especially considering the many months that have passed
in between).

Original description:

When we kill the process group, make sure to wait until the results
of all subprocesses have been collected to ensure all subprocesses are
stopped before the process-wrapper exits.

I have been unable to come up with a test case to show that this does
anything useful though (in particular because the process-wrapper uses
SIGKILL against the processes instead of SIGTERM so I cannot install
any handlers to mess things up). Conceptually, the problem existed, but
it is a race condition that is very hard to trigger. But I'm adding
some unit tests for the internals.

Partially fixes https://github.com/bazelbuild/bazel/issues/10245.

RELNOTES: None.
PiperOrigin-RevId: 312093258
diff --git a/src/BUILD b/src/BUILD
index 926758f..85f695e 100644
--- a/src/BUILD
+++ b/src/BUILD
@@ -463,6 +463,7 @@
         "//src/test/py/bazel:srcs",
         "//src/test/shell:srcs",
         "//src/test/testdata/test_tls_certificate",
+        "//src/test/tools:srcs",
         "//src/tools/android/java/com/google/devtools/build/android:srcs",
         "//src/tools/execlog:srcs",
         "//src/tools/workspacelog:srcs",