Reworked class generation so that it uses Java rather than Groovy reflective types.
Fixed some issues with decorating properties with overloaded setters (now that we can).
Pushed some of the knowledge of @NonExtensible up from AsmBackedClassGenerator to AbstractClassGenerator, so we don't have to use the groovy type registry.
Changed class decoration to allow services to be injected by attaching an @Inject to a getter. The service is injected lazily as required.
Changed AbstractProject and AbstractTask so that most services are injected as required. Based on experiments, this can have a good effect on performance and on heap usage in particular.
Added @HasInternalProtocol
Changed class decoration os that services are located using generic Type rather than raw Class, to allow Factory<X> instances, and other parameterized types, to be injected.
Changed a bunch of task types to inject services via properties rather than constructor, so that internal services are not made (quite so) visible to subtypes and can be added or removed in a backwards compatible way, and to defer construction of services until they are used.