Refactor: EntitySpec interface to EntitySpec DTO

The first commit is interesting (look at that by itself).

The second commit just changes a massive number of uses of the now-deprecated code to the new EntitySpec.create() methods.

I haven't moved `EntitySpecs.appSpec(...)` yet. Still thinking about that. Suggest it can go in a subsequent pull request.