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.
I am little bit confused here. Is the value of `componentName` supposed to be one of the types we have discussed before (Empty, Root, RestApi, etc.)? Where is the parameter `name` used and what is it good for?

I was imagining the following usage:

```
// a project with shared models in `common/models`
Workspace.createFromTemplate('.', ComponentType.Empty, cb);
Workspace.createFromTemplate('rest', ComponentType.RestApi, cb);
Workspace.createFromTemplate('common', ComponentType.Models, cb);
```