Partial support for destructuring in block binding

This handles patterns in let and const declarations but not yet
in loop headers.

This also simplifies the generated code, in that it does not
hoist a variable declaration when it is not needed.

Issue #1276