Use a struct to represent numerical versions instead of encoding release
names in an enumeration. This avoids the need to extend the enumeration
every time there is a new release.
Rename GetMacosVersion() -> GetMacosAlignedVersion() to better reflect
how this is used on non-MacOS platforms.
Maybe should have a check to make sure we don't perform unsigned underflow..
Maybe something like this?