Fix duplicate let when rebinding after a directly matching case
When a variable is shadowed inside a directly matching case branch and
then rebound after the case, the JavaScript code generator could declare
the same let variable twice in one scope. A directly matching branch
generates code into the enclosing scope, so the generator now keeps the
highest counter value used for a name and does not go below it.
Fixes #5748