Make sure whitespace is kept for all kind of blocks

Generally, we want to keep blank lines between statements. So far, we
did so for statements in |StmtBlock|, but not for other block types.
This is now fixed.
Fix whitespace-dropping code

The original whitespace-dropping code actually didn't work and kept
whitespace-only lines there. This commit replaces it with new code,
which:

  * Actually works :-)

  * Deals only with empty lines (as whitespace was already stripped in
    previous steps)

  * Keeps lines between comment segments intact. For example, blank line
    between these two comments will be kept:

      // foo

      // bar