AsmBackedClassGeneratedManagedStateTest.groovy

Change class generation so that each type is validated once, rather than each time it appears in a type graph. Also report multiple validation problems, if they exist, rather than stopping on the first problem.

Introduce a service that takes care of inspecting a type for properties, methods and other metadata. This is a step towards using a single mechanism to discover these things efficiently rather than doing so in a bunch of different ways and multiple times. In this commit, refactor `ClassInspector` into this service and add some in-memory caching. This class was already used for class generation.

Use this service directly in `ConventionAwareHelper` and remove some ad hoc static caching. This avoids inspecting a type that has just been inspected for class generation when an instance is first created.

Also use this service in `OptionsReader`. While this wasn't a performance problem, this change means more consistent behaviour in how annotations are validated and work with Kotlin and Groovy classes (over time).