[refactor] Re-implement Statement::apply in terms of Visitor

`usesEH`, `comeFrom` and `hasCode` are now self-contained, and do not require adding virtual functions to ast classes.