This has multiple advantages:
- we need only one function argument/instance variable instead of three
- no need to default initialize variables
- no custom parsing code
- VersionTuple has comparison operators, which makes version comparisons much simpler
I think this touches a lot of code which is not very well tested, so I'd
appreciate it if you can double-check the transformations in the code that you
are familiar with.