Groovy incremental compilation support (#9616) Inspired by https://github.com/gradle/gradle/pull/9388 , this PR implements Groovy compilation avoidance. Unlike Java, things are a little more complex in Groovy compilation - a compilation unit can generate multiple classes. Thus, we introduced a `sourceClassMappingFile`, which records the source to classes mappings during the compilation process. Later, we can use this information in incremental compiler: only the affected groovy source files get recompiled in next compilation.
We want to enable compilation avoidance for Groovy: the Groovy transformation classpath should be normailzed with `@Classpath` and other classpath should be normalized with `@CompileClasspath`. This PR adds a `compilerPluginClasspath` field (the name is not finalized yet, suggestion is always welcomed) to `GroovyCompile`. Users can enable `org.gradle.groovy.compilation.avoidance` and set `compilerPluginClasspath`.