code: func GroupBy(input Iterator, keyFunc func(interface{}) interface{}) Iterator {
  	if keyFunc == nil {
  		keyFunc = func(a interface{}) interface{} { return a }
  	}
  	return &groupBy{
  		input:    input,
  		keyFunc:  keyFunc,
  		groupKey: uniqueKey,
  		curKey:   uniqueKey,
  	}
  }
docs: // Group by returns an iterator of iterators over the values of the input
  // iterator that consecutively return the same value when input to the key
  // function. Note that repeated calls to each value of the GroupBy Iterator
  // does not return a new iterator over the values for that key.