code: func (iter Enumerator) splitN(operation Transform, n uint) []Enumerator {
  	results, cast := make([]chan interface{}, n, n), make([]Enumerator, n, n)
  
  	for i := uint(0); i < n; i++ {
  		results[i] = make(chan interface{})
  		cast[i] = results[i]
  	}
  
  	go func() {
  		for i := uint(0); i < n; i++ {
  			go func(addr uint) {
  				defer close(results[addr])
  				for {
  					read, ok := <-iter
  					if !ok {
  						return
  					}
  					results[addr] <- operation(read)
  				}
  			}(i)
  		}
  	}()
  
  	return cast
  }
docs: // splitN creates N Enumerators, each will be a subset of the original Enumerator and will have
  // distinct populations from one another.