grappa shuffle

This PR implements GrappaShuffleHashJoin, which looks like
distributed shuffle by hashed key + local join.

corresponds with changes merged into https://github.com/uwsampa/grappa/tree/bmyerz-grappalog-master at a0d19c7
Issues: This is implemented in one operator in the Grappalang style. Ideally this partitioned type of operator might actually be decomposed. It would use parts of the distributed IR embedded in MyriaAlgebra, like MyriaShuffle.

 
- [x] grappa shuffle hash join
- [x] BUG: declares a new tuple type for iterating over join result (test case Q9)

Replacement for #218

-- Reissue of #234  and #251, except that it is based to master and includes latest changes