(+) Rewrite Cross&Selection to Joins, if possible

(+) Extends fold to include a case for JoinNodes
(+) Abstract BinaryNode to share code between Cross and Join nodes,
make code that operates on both work nice