Fold

@daveray @johnmidgley @pathaks 

See pigpen.fold for details, usage, and most of the interesting code.

Other notes:
1) This changes the join and cogroup syntax. They now require that the select statements are passed as a vector.
2) The UDF is now constructed before use. This is to accomodate passing code to the new algebraic UDF.

If you look at anything, make it pigpen.fold - that's the interesting one. Make sure that the docstrings adequately explain how to use the feature. :)