Type check translated switches with an expected type.

Usually, the pattern match translation converts a `Match`
to code consisting of if/else and label jumps.

However, if it able to express the result as a table switch,
it emits another `Match` node.

The pattern matcher phase's TypingTransformer then typechecks
that without an expected type, which needlessly lubs the
cases.
This commit changes `translateMatch` to return the expected type
as well as the translated match and uses it in `MatchTransformer`.