Real closures

Closure are currently implemented as "poor man's closures" on the master branch : the full scope of a function declaration is kept for function execution, thus potentially retaining unneeded data in memory. This branch solves this problem by computing the proper closure for a function. This is done by finding the nearest static scope, looking up used names in the function definition, and keeping only the ones that are required in the closure.