WIP Add component template support

@bajtos - this is a work in progress. It combines the approach we discussed yesterday (copying over raw files) with the existing approach (using the workspace API itself). I'm fairly happy with the result.

Before I finish this up, I'd like your feedback or any gotchas you might see with this approach. If all is well I can take a final pass including the following:

 - cleanup references to `empty` template in the tests (eg. `givenEmptyWorkspace()`
 - add tests for each template to ensure the entities are available once created
 - add tests that check if the static files were copied to the correct place

If you happen to make progress on the ID reworking, I can also rework any dependencies of the templates before landing this. Right now it uses `componentName`, `modelName` and other `name` foreign keys.
In the 2.x API, each template has two properties: `name` and `description`, e.g.

```
name: "mobile",
description: "A mobile backend"
```

Is there a way to preserve this in 3.x? The change is outside the scope of this pull request.