[ADAM-528][ADAM-533] Adds new RegionJoin impl that is shuffle-based

First pass shuffle-based join impl.  Passes some rudimentary tests.

Certainly needs docs and more tests.

Fixes #528.
Fixes #533.
Just making sure I understand this part correctly: SortedIntervalPartitionJoin takes a zipped partition (i.e, the `leftIter` and the `rightIter`) and internally does the sort merge join?