BlockBindingTransformer missed bug fixes and tests

I realized there's a couple of missed bugs in the `BlockBindingTransfomer`

1. `this` and `arguments` were swapped. So if using the `FnExtractAbruptCompletions` strategy, `this` would get transformed to `arguments` and `arguments` would get transformed to `this. Oops :$
2. Variables declared in loops who's content get extracted by `FnExtractAbruptCompletions` don't get hoisted. The correct thing to do is to declare the variable outside the loop

I fixed the above two points and added tests for them.
I also added a test to make sure that function declarations are considered as Block Binded declarations by `FindBlockBindingInLoop`. This already worked as expected, but might not in the future.

The 3 commits are logically separate, and shouldn't be squashed together