Fixing Program/BlockStatement rewrites

Fixes #90

There is one failing test I haven't figured out how to fix yet. We need to unwrap `ExpressionStatements` for the general case but here if we don't then we end up with two semicolons.
Same reason as above. Its only matching the inner-expression (the part we care about) not the statement (the part that owns the semicolon). This is related to the test-failure where it creates a semi-colon for the matched expression (due to its own local context) but there was already a semi-colon there.