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
Well, for example, a For Statement only gets a Scope when its initializer is `let/const` ([code](https://github.com/google/traceur-compiler/blob/23e48c692383ab76a8ccfa8ee5fe82b6c1353fc0/src/semantics/ScopeVisitor.js#L149-L155))
So we can't reliably say that every For Statement will have a scope, cz some of them don't have initializers, or use `var`.
While Statements never have a Scope, only their block does.

The reason why we need the Scope of a For Statement (if it's available) is because it might have block binding in its initializer that we can't ignore