code: func join(its ...shape.Shape) shape.Shape {
  	if len(its) == 0 {
  		return shape.Null{}
  	} else if _, ok := its[0].(shape.AllNodes); ok {
  		return join(its[1:]...)
  	}
  	return shape.Intersect(its)
  }
docs: // join puts two iterators together by intersecting their result sets with an AND
  // Since we're using an and iterator, it's a good idea to put the smallest result
  // set first so that Next() produces fewer values to check Contains().