Fix join.mapGroup issue

In rare cases that use mapGroup (or mapValueStream) with functions that don't have the property that fn(Iterator.empty) == Iterator.empty, you could get surprising results.

Here we make it clearer what the contract is and add a test to check it.