merge(other) {
    var query = new Query
      , p1 = this.resolvedPredicate
      , p2 = other.resolvedPredicate
      , t1 = this.resolvedType
      , t2 = other.resolvedType
      , type, pred;

    // Stolen from Sass :D
    t1 = t1 || t2;
    t2 = t2 || t1;
    if (('not' == p1) ^ ('not' == p2)) {
      if (t1 == t2) return;
      type = ('not' == p1) ? t2 : t1;
      pred = ('not' == p1) ? p2 : p1;
    } else if (('not' == p1) && ('not' == p2)) {
      if (t1 != t2) return;
      type = t1;
      pred = 'not';
    } else if (t1 != t2) {
      return;
    } else {
      type = t1;
      pred = p1 || p2;
    }
    query.predicate = pred;
    query.type = type;
    query.nodes = this.nodes.concat(other.nodes);
    return query;
  }
Merges this query with the `other`.

@param {Query} other
@return {Query}
@api private