Tests for control statements

The nice part here is that I've done all the legwork and adding more test cases should be simple.

This code generates n-way test cases using a simple DSL made from list monad do notation and a Monoid.

We test each type of control structure with each type of body we provide. If the control structure takes multiple bodies (e.g. if else) then we test each n-way combination of bodies. Human readable test case names are generated with a Monoid instance that builds up the test cases as we "fill in the holes" in the test case data with bodies.

We probably, for example, should test do-while statements. And perhaps consider adding some other types of bodies.