'A VersionList satisfies another if some version in the list
would satisfy some version in the other list.  This uses
essentially the same algorithm as overlaps() does for
VersionList, but it calls satisfies() on member Versions
and VersionRanges.
If strict is specified, this version list must lie entirely
*within* the other in order to satisfy it.'

@coerced
def satisfies(self, other, strict=False):

    if ((not other) or (not self)):
        return False
    if strict:
        return (self in other)
    s = o = 0
    while ((s < len(self)) and (o < len(other))):
        if self[s].satisfies(other[o]):
            return True
        elif (self[s] < other[o]):
            s += 1
        else:
            o += 1
    return False
