Make the parser accept arbitrarily nested blocks.

Stack overflows are avoided by returning early from potentially
recursive functions (here: parseStatement) and placing the "unfinished" item
(here: the block the statement is contained in) onto a parser stack. A
function of a higher level (here: parseBlock) will then work off the
stack in a loop.