Block binding: Fix issue with sibling scopes

This introduces a new Scope subclass that keeps track of references.
Then we use that to determine if we need to rename the binding or not.

Fixes #1358
Should we abstract the loop here and above?
```js
function inModuleScope(scope) {
  return scope.some((scope) => scope.tree.type === MODULE);
}
```