Block Binding: use orignal name where possible

To accomplish that, the `BlockBindingTransformer` keeps track of a `usedVars_` object, indicating which variables are used in the function so far. The object is initialized with all the bindings in the scope.

I also introduced a `Scope.renameBinding` function, that renames a binding to a new tree and a newType when needed. I use it to keep scope's data correct, mainly for `FindBlockBindingInLoop`, and also to avoid a duplicateVarDeclaration error

Closes #1274
extract. You can pass the array to push to as a param.