'Sort VersionRanges lexicographically so that they are ordered first
by start and then by end.  None denotes an open range, so None in
the start position is less than everything except None, and None in
the end position is greater than everything but None.'

@coerced
def __lt__(self, other):

    if (other is None):
        return False
    (s, o) = (self, other)
    if (s.start != o.start):
        return ((s.start is None) or ((o.start is not None) and (s.start < o.start)))
    return (((s.end != o.end) and (o.end is None)) or ((s.end is not None) and (s.end < o.end)))
