Template for version string

This adds the ability to template the version string that is stamped.

If the `AssemblyInformationalVersionAttribute` already exists, then tokens within the string will be replaced when stamped.

- `%version%` is replaced with the assembly version. Can also include a number for how many parts of the version to include. For example `%version2%` would output 1.0, `%version3%` outputs 1.0.0, etc.
- `%githash%` is replaced with the sha1 of the tip.
- `%branch%` is replaced with the branch name.
- `%haschanges%` is replaced with a string saying the branch has changes, if the repository is not clean.