draft: port release.sh to python
Largely this is the same, but with a few quality of life improvements.
First, it tries to do sanity checking before expensive operations, so we check that the upstream commit is correct before building. (the tag is still checked after, but already having a tag that isn't pointing at the right commit is rare)
Second, it moves some of the complicated logic out of the shell script, and into a descriptive toml file. This makes supporting new projects (such as pixman and waffle) much easier, and removes some of the complication of the project.
A major difference is that this doesn't support the module format, each project must be released one at a time.
There are a few command line options that are unsupported, and the autotools path is currently not implemented.
This was motiviated by wanting to migrate some additional projects to use these tools, but finding the project rather hard to work with (pixman and waffle). The idea here is that projects are stored in a declarative file (I picked toml, but another format could be used if there's strong preference). A new project is supported simply by adding a few lines to the declarative file, rather than more complex shell logic.