Provide any of the args and match or dont.

        :param props: Should be a subset of my props.
        :param rng: Exactly match my range.
        :param offset: I start after this offset.
        :returns: True if all the provided predicates match or are None

def match(self, props=None, rng=None, offset=None):
        """
        Provide any of the args and match or dont.

        :param props: Should be a subset of my props.
        :param rng: Exactly match my range.
        :param offset: I start after this offset.
        :returns: True if all the provided predicates match or are None
        """

        if rng:
            s, e = rng
        else:
            e = s = None

        return ((e is None or self.end == e) and
                (s is None or self.start == s)) and \
            (props is None or props.issubset(self.props)) and \
            (offset is None or self.start >= offset)