Core and Plugin format revisioning

As drafted in this email, we need to revision our YAML format.

The base YAML format (project configuration and base plugin attributes and dependencies), must never break backwards compatibility in a stable release, but the format is allowed to be extended so long as previous expressions in project YAML still have the same meaning.

For attributes declared by plugins which live outside of the core format and define their own APIs, the same rules apply except that plugins have individual format versions.

Users (project authors and maintainers) will be able to assert a minimal bound version number for the buildstream components they use, this means new attributes in the project.conf to assert versions.

A format version is incremented every time the format is enhanced, whether to limit version bumps to one per stable release or not is to be considered, probably just bump it every time an enhancement is made. Format versions are not incremented in bugfix releases on stable branches, so they always occur in feature branches which land on master before the release window.