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.
This allows component templates to declare sub components. The use case for this create various root components (eg. `api server`, `full stack`, etc) that declare the components they require. This allows us to have a single component template structure.