Project Template (v2)

This PR contains an updated version of the Project Template support based on the latest JSON schema.
It is re-using existing Kubernetes structs and the transformation process is independent from the the data structures. 
Why is this private?  If it's private, then you need to provide a constructor that takes it (otherwise why have it?).  If you want to use this as a value object, then it should be public.