Move hashJoin and friends to TypedPipe

It is confusing (and wrong) that hashCogroup works on Grouped and not TypedPipe. This is because making a Grouped everywhere else results in that data being sent across the network. This does NOT happen with hashCogroup. For that, the left is streamed through one at a time locally.

Secondly, we can handle mapValueStream calls on the Grouped right-hand-side argument (think taking the max or something), but we cannot on the left since mapValueStream requires all the keys to have been collocated. This (while probably never happening in production) would have been a bug in prior versions.