Do a better job at understanding variable binding
Do a better job at understanding variable binding

Mostly accurately compute the binding of names to the correct lexical scope
so we know what variables are global variables and what are not. This
allows us to do two things:

 - Don't emit copies in the global scope when the variable being mutated is
   actually a local variable.
 - Catch mutations of global variables inside functions even when the function
   doesn't explicitly use the 'global' keyword.

https://bugzilla.gnome.org/show_bug.cgi?id=659334

alexey4petrov/reinteract,alexey4petrov/reinteract,alexey4petrov/reinteract