Introduce WhileStmt and WhileDoStmt

The goal of this effort is to establish implementations for WhileDo, DoWhile, ForLoop, and CForLoop.

The initial implementation will be a very thin wrapping over BlockStmt.  These new AST classes
will inherit from BlockStmt in the C++ sense but will be BlockStmt AST nodes in all other ways e.g.
they will return true for isBlockStmt().

I will then make a series of small changes to the compiler to harden the abstractions.  Once the
abstractions are complete I can modify the internal representation as required.

This is the first step; introduce WhileDoStmt and arrange for parser/build to create this new Class in
preference to a plain BlockStmt.

I've never been a big fan of ?: but that's probably just personal preference. I'm not sure if we have a general consensus in the code base either.