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
This created a TempScope for a `VariableDeclarationList`, meaning the same variable name gets reused in other Lists and can get declared twice.

This created an issue for me when running the [DeconstructingBlockBinding test](https://github.com/google/traceur-compiler/blob/23e48c692383ab76a8ccfa8ee5fe82b6c1353fc0/test/feature/Scope/DeconstructingBlockBinding.js).

In the same block, the Deconstructing Transformer would create code that declares the same variable twice.
And a validator would complain (ConstChecker iirc)

This currently isn't an issue because the BlockBindingTransfomer transformed all these variable declarations to `try-catches`, effectively "layering" the variable declarations, so nobody complained.