add try/catch/else (#42211)
This PR allows the use of `else` inside try-blocks, which is only taken
if no exception was caught inside `try`. It is still combinable with
`finally` as well.
If an error is thrown inside the `else` block, the current semantics are
that the error does not get caught and is thrown like normal, but the
`finally` block is still run afterwards. This seemed like the most
sensible option to me.
I am not very confident about the implementation of linearization for
`trycatchelse` here, so I would appreciate it if @JeffBezanson could
give this a thorough review, so that I don't miss any edge cases.
I thought we had an issue for this already, but I couldn't find
anything. `else` might also not be the best keyword here, so maybe we
can come up with something clearer. But it of course has the advantage
that it is already a Julia keyword, so we don't need to add a new one.
Co-authored-by: Jeff Bezanson <jeff.bezanson@gmail.com>