Fix several bugs in the preliminary closure implementation.

- Bad interaction between special-case name lookup for recursive
  functions and closures (name can be in potentially two closures in two
  different scopes!)
- Calling a function with closure environment through Function object
  didn't respect the environment
- Refcounting function values in closures as if they were locals was
  problematic

Tests for all of these, including Knuth's man-or-boy test.