code: func (it *And) getSubTags() map[string]struct{} {
  	tags := make(map[string]struct{})
  	for _, sub := range it.SubIterators() {
  		for _, tag := range sub.Tagger().Tags() {
  			tags[tag] = struct{}{}
  		}
  	}
  	for _, tag := range it.tags.Tags() {
  		tags[tag] = struct{}{}
  	}
  	return tags
  }
docs: // If we're replacing ourselves by a single iterator, we need to grab the
  // result tags from the iterators that, while still valid and would hold
  // the same values as this and, are not going to stay.
  // getSubTags() returns a map of the tags for all the subiterators.