Fix try/throw/catch/finally edge-cases
- Fix case where try/catch is not contained in a block (e.g, case, conditional or label)
- Fix case where throw is incorrectly mapped inside a sync try to an exit, rather than the matching catch [NB: this mimics V8's incorrect behaviour. After the fix it meets the specification and also Babel's implementation]