Maybe add comment like this:

     * This map makes two passes over the data:
     * (1) Values are merged into Groups, which are spilled to disk as necessary.
     * (2) Groups are read from disk and merged into Combiners, which are returned.

     * If we never spill to disk, we can avoid pass 2 if and only if M and C are the same type
     * (i.e., groups are already combiners).