- eliminate empty blocks - flatten out if try-block does not throw
extension of #1675
has_side_effects()
`AST_Try` is an `AST_Block`, so besides try block we also need to inspect catch and finally blocks for possible side effects. Also extend this functionality to handle `AST_If` and `AST_LabeledStatement` while we are at it. fixes #1673