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
I found the name of this function confusing. It makes sense in the context of the FreeVariableChecker but otherwise it implies a purpose that the framework need not care about.   How about `referenceFound()` or `identifierReferenceFound`?