Be less conservative about reprinting Statement nodes.

Previously, if the type of oldNode and newNode differed at all, we would
print newNode generically, without making any effort to patch it into the
previous position of oldNode.

This commit takes advantage of the observation that all Statement nodes
should be interchangeable as far as the surrounding code is concerned.

The benefit is that there should be fewer superificial whitespace changes
when statements are replaced, particularly at the top level.
Print node.comments instead of node.original.comments, if possible.
Use printNakedBlockStatement to print Program bodies.

This means, most importantly, that multi-line statements will be separated
from their neighbors by two newlines, whereas single-line statements will
be separated by only one newline.