code: func (p *Path) Back(tag string) *Path {
  	newPath := NewPath(p.qs)
  	i := len(p.stack) - 1
  	ctx := &newPath.baseContext
  	for {
  		if i < 0 {
  			return p.Reverse()
  		}
  		if p.stack[i].IsTag {
  			for _, x := range p.stack[i].tags {
  				if x == tag {
  					// Found what we're looking for.
  					p.stack = p.stack[:i+1]
  					return p.And(newPath)
  				}
  			}
  		}
  		var revMorphism morphism
  		revMorphism, ctx = p.stack[i].Reversal(ctx)
  		newPath.stack = append(newPath.stack, revMorphism)
  		i--
  	}
  }
docs: // Back returns to a previously tagged place in the path. Any constraints applied after the Tag will remain in effect, but traversal continues from the tagged point instead, not from the end of the chain.
  //
  // For example:
  //  // Will return "bob" iff "bob" is cool
  //  StartPath(qs, "bob").Tag("person_tag").Out("status").Is("cool").Back("person_tag")