Error handling

This produces better error messages for a few common syntax errors:

 - `else` or `else if` without a corresponding `if`
 - `when` without a corresponding `case`

It also allows `if`, `unless`, `else if`, `else` and `while` to omit the block.  It just defaults to an empty block.