Allow applying plugins to subprojects using new DSL This change adds new `subprojects` and `allprojects` methods to the `plugins` DSL, which allow users to apply plugins to multiple subprojects at once.
The plugins are resolved in the context of the parent project and put on the parent's classpath. This ensures that the parent can cross-configure its children. A side-effect is that unrelated subprojects will see those plugin classes too, even though they are not applied to them.
The `plugins` block is no longer backed by an AST transformation, but is now compiled, exactly like the `buildscript` and `pluginRepositories` blocks. This will give users greater flexibility to conditionally apply plugins in the future. Currently no access is granted to any methods outside of the `plugins` API though.