Push a GradleDistribution into GradleExecuters so that they can adapt to different versions that they might be running.

Required some restructuring of the GradleDistribution hierarchy, and includes some extra tidy up.
Cater for versions earlier than m5 having a bug that prevented any value in JAVA/GRADLE_OPTS having a space.