Allow user-data to override project name and type

This allows extensions to define project-attributes that override the project's name and type.

The motivation for this is to allow users to override project name at a project level ( calling it "master", the current branch they are working on or something else) by using define-project-attribute. It creates a level of granularity where you can have a default-value defined in the project-type which is overridden by the project file. The project-file can then in turn be overridden by project-type-instance specific values defined by the user.