Make project structure templates stackable

This lets users override parts of the target template keys, instead of
having to override the whole thing.

For example, this lets users only override the application target groups
for the swift language. It also lets users add their own templates to
their configs so that they can define their own custom templates