This change enables cleaner separation between "actual tests" and "support classes for the tests".
For instance, `:src:core` might provide dummy samplers like `ThreadSleep` for testing purposes.
`ThreadSleep` would depend on `src/test/main` (since it would `extend AbstractSampler`),
and other modules (e.g. tests in `:src:protocols:http`) might need that `ThreadSleep` sampler.
It won't be practical to create `core-testkit` modules for every module,
so we move those reusable test classes to `testFixtures/...` source set.
See https://docs.gradle.org/current/userguide/java_testing.html#sec:java_test_fixtures
ServiceLoader is Java standard approach for locating implementaitons,
and it allows pluggability without relying on a filesystem layout.
Fixes https://github.com/apache/jmeter/issues/5883
For instance, overrides like java.nio.DoubleBuffer#clear() do not exist in Java 8,
so without "--release 8" the bytecode will not execute in Java 8.
With --release 8, javac compiles the call to java.nio.Buffer#clear() which
exists in Java 8.
Moving test versions for testing dependencies to a separate BOM
would make it slightly easier for the consumers to work with regular JMeter dependencies.
In other words, JMeter should not require a specific JUnit 5 version,
so JUnit5 should not be a part of the regular dependencies.