Multiway join rules

Add rules to compile query to a plan using HyperCube shuffle and multiway join. 
* [x]  add rule to merge left deep join into nary join in logical plan
* [x]  add rule break nary join to hypercube shuffle and local multiway join
* [x]  add rule to instantiate local multiway join (currently we only have leapfrog, but there could be more, so this part is seperated from break break nary join)
* [x]  add rule to place sort before LeapFrogJoin.
* [x]  add unit test
* [x]  add query test
 

It looks here like `hashed_columns` is an `int`. (it comes from `i` which comes from `enumerate`). In general, this is wrong -- we want these to be `UnnamedAttributeRef`s. See, e.g., https://github.com/uwescience/raco/pull/206