Optimize GroupByHash strategy

map.put is called only when map.get on the current row doesn't find the row.
If there was method like putIfAbsent, the commit must have been much simpler.

Still, when rehash occurred, hashCode of every records is re-calculated from the scratch.