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).