Added @Incubating
Don't expose a plugins(Closure) method in the build script formally.

 Exposing this formally (i.e. via Script, or script target) means that “plugins” can't be used as an identifier in a domain object container as our dispatch logic for creation in the container DSL will prefer this which is not what we want.

Instead, make the plugin(Closure) method implicitly available by attaching it to the distinct script class that is used when executing this block (plus the buildscript {} block).
Method should be public.
Provide a temporary workaround to the different way that buildscript {} blocks delegate in build scripts.

This is a temporary workaround in order to shake some associated changes out in CI that will still be effectual when this is fixed with a more general solution.
Fix the problem with plugins {} DSL exposing plugins(Closure) to the build script proper by compile time transforming it to be a direct configure of a service lookup.

The previous strategy of using a different script class didn't work because of the behavioural variance of different Script impls (e.g. ProjectScript). This strategy exposes the Script object's service registry (via an obscure name) which gets around the problem of having to add a method to the first pass of scripts. We are however introducing a new symbol into the namespace, but it has an obscure name.
Fix Java 6 compile problem due to weaker type inference.
Merge remote-tracking branch 'origin/release'