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.