'A VersionRange satisfies another if some version in this range
would satisfy some version in the other range.  To do this it must
either:
a) Overlap with the other range
b) The start of this range satisfies the end of the other range.
This is essentially the same as overlaps(), but overlaps assumes
that its arguments are specific.  That is, 4.7 is interpreted as
4.7.0.0.0.0... .  This funciton assumes that 4.7 woudl be satisfied
by 4.7.3.5, etc.
Rationale:
If a user asks for gcc@4.5:4.7, and a package is only compatible with
gcc@4.7.3:4.8, then that package should be able to build under the
constraints.  Just using overlaps() would not work here.
Note that we don\'t need to check whether the end of this range
would satisfy the start of the other range, because overlaps()
already covers that case.
Note further that overlaps() is a symmetric operation, while
satisfies() is not.'

@coerced
def satisfies(self, other):

    return (self.overlaps(other) or (self.start and other.end and self.start.satisfies(other.end)))
