Change class generation to accept interface types. The interface may define mutable properties and an implementation is mixed in for each mutable property. The interface may also define `default` methods, `@Inject` properties and may extend `ExtensionAware`. Immutable properties with lazy types (eg `Property`) are not supported yet. This commit does not include any validation or documentation. These will be added in later commits.
Add a mechanism to register injection annotations globally and use this to validate that annotations are not attached to types where they are not supported. For example, fail when `@Workspace` is attached to a task property getter.