Implement Cartesian products and tidy up the compiler a bit.
Make Cartesian products more general and continue working on the compiler.