Rewrite BlockBindingTransfomer for better performance

This is my proposition to optimize the BlockBindingTransfomer

The general idea behind it is:

* No longer use try-catch

* In variable declarations, transform any `let/const` to `var` and rename the variable to avoid name collisions.

* In loops, check if it contains any block bindings AND function declarations that use those block binded variables. 
If that's the case, then extract the loopBody to a function (~iife), and transform the final loopBody to invoke that function. 
The loopBody could have had `break`s, `continue`s and `return`s in it. These are handled by `if` statements and `switch` cases in the resulting transformed loopBody. Labels are accounted for (see tests)
* If the loop doesn't contain block bindings that are used in function declarations, then everything is transformed to `var` and renamed to avoid name collisions.

The PR isn't perfect and does have some rough edges. Please do comment on them and bash anything wrong that you see. It's my first contribution to traceur :-)
It does pass all the tests.

It's a significant change.
I'm free most days if anyone wants to pair up for quicker review
My issue was that this
```js
for (let i = 0; i < 5; i++) {
  function t(){
    let i = 5;
    alert(i);
  }
}
```
After the renames would become this:
```js
var t$__1;
for (var i$__0 = 0; i$__0 < 5; i$__0++) {
  t$__1 = function(){
    let i = 5; // (this eventually becomes 'var')
    alert(i$__0); // ! this shouldn't be renamed !
  }
}
```

That happens because the `AlphaRenamer`, which is a `ScopeTransformer`, [stops](https://github.com/google/traceur-compiler/blob/30bc75a79ae33431daa4f56ae1c21702eb997c7b/src/codegeneration/ScopeTransformer.js#L65) transforming a function when the searched [variable is a `variableInFunction`](https://github.com/google/traceur-compiler/blob/30bc75a79ae33431daa4f56ae1c21702eb997c7b/src/codegeneration/ScopeTransformer.js#L87). So it doesn't account for Block Binded variables.
It would [stop](https://github.com/google/traceur-compiler/blob/30bc75a79ae33431daa4f56ae1c21702eb997c7b/src/codegeneration/ScopeTransformer.js#L46) transforming a Block when the searched variable is a variableInBlock.

----

In [`getDoNotRecurse`](https://github.com/google/traceur-compiler/blob/30bc75a79ae33431daa4f56ae1c21702eb997c7b/src/codegeneration/ScopeTransformer.js#L80-L84) we say that we shouldn't recurse if "this.varName_ is rebound in the new nested scope".
A Block Binded variable does meet that criteria.

An alternative would be that instead of modifying `variablesInFunction`, we can modify `getDoNotRecurse`.