difference(...intervals) {
    return Interval.xor([this].concat(intervals))
      .map((i) => this.intersection(i))
      .filter((i) => i && !i.isEmpty());
  }
Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.
@param {...Interval} intervals
@return {Array}