Composable Joins in the Typed-API

This is big change, but it adds a long missing feature: composing joins
into one MR job. This enables three(and more)-way inner/outer/custom joins.

I think there needs to be some polishing and refactoring KeyedListLike,
Grouped, CoGrouped, ReduceStep, etc... Lot's seem redundant, but I'd
like to get this big merge in before doing too much of that.

Boom
Make sure we trigger self joins (and fix related bug)
Add tests for distinctBy
Add comments per review
Merge pull request #735 from twitter/composablejoin

Composable Joins in the Typed-API