Add type.
Make AbstractPluginAware implementors responsible for creating ObjectConfigurationAction objects.

This allows different impls to change the impl, which will be needed shortly.
Allow plugins to declare model rules.

Plugins cannot declare model rules directly, but contain nested static classes annotated with @RuleSource that do.
This is because the `apply plugin: SomeClass` mechanism has public API that requires the class implement Plugin (ObjectConfigurationAction).
Classes that implement Plugin are likely to violate the validity rules for module rule sources (i.e. must be completely stateless).
This seemed a reasonable compromise.

Another consequential change in this set is that we now have a contextual exception wrapping exceptions thrown during apply() methods.