Refactoring to make it possible for plugins to contribute new rule types

- Extracted meta-info about a rule method (types, descriptor, etc) into MethodRuleDefinition
- MethodRuleDefinition also provides access to invoker for method-based rule
- Split out classes that handle the actual registration of rules of different types
  - Plugins will be able to contribute a handler for a custom rule type

+review REVIEW-5081
Register custom components via a custom model rule type (@ComponentType)

- ModelRuleInspector uses all available rule handlers
- @ComponentType rule defines type via a ComponentTypeBuilder subject
    - Handler uses rule to register type on ComponentSpecContainer
- Provide ‘target’ to rule handlers, so that ComponentType rule handler can implicitly apply the ComponentModelBasePlugin
    - This is a temporary hack

+review REVIEW-5081
Allow a rule handler to implicitly apply rules from another source

- For now only works for Plugin classes as source, and the entire plugin is applied.

+review REVIEW-5081
Finishing off conversion from @ComponentModel to @ComponentType

- Fail if rule has return value
- Allow rule that doesn’t set default implementation
- Fail if default implementation set multiple times

+review REVIEW-5081