This adds support for requesting a minimum Go version instead of an
exact one. If USES contains something like go:X.Y+, we walk the list
of valid Go versions backward and pick the first element that matches
either the requested version or the default version. Assuming the
list of valid versions is sorted semantically, this means we will
pick the requested version if it is newer than the default version,
and the default version otherwise.
This is somewhat imprecise, but it's hard to do better without a
comparison operator that understands semantic versioning, which bmake
lacks. Simply comparing versions lexicographically or numerically
would produce incorrect results, since e.g. 1.3 precedes 1.29 but is
both lexicographically and numerically larger.
Note that this new code automatically handles development versions
without having to include -devel in USES. For instance, setting
USES=go:1.26+ will select lang/go-devel right now, and lang/go126
once it is created and GO_VALID_VERSIONS is updated accordingly.
Note also that specifying a version that does not yet exist in the
ports tree will have the same effect as specifying a version that
has been retired: silently fall back to the default version.