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
The comment makes no sense. I changed it to:

```js
    // If we are at a var scope we do not need to rename since we treat all top
    // level declarations as var declarations.
```

We are only transforming the variable declaration list here so the scope is not going to change. If there is an initializer that contains a function expression then that will have its own scope. We do make sure that the initializer expression is not included in this renaming.