Move the DefaultXXX to the model sub-project. Since the implementation of the model can be used for both plugin and server.
Make all the interfaces in the model extend Serializable. Then no need for the implementation classes to declare Serializable.
Add Copy constructor for the model classes. This is because the model result returned from Gradle Tooling API is not the original type but a wrapped one. This causes some issue when calling the 'equals()' method.