code improvement in LetScoper

the goal here was to remove the dependency on nvm.Procedure, in
preparation for eventually moving LetScoper to parse0

it's also nice that it's a step closer to being pure-functional
now, as one big assignment to Procedure.lets is now the caller's
responsibility, instead of a series of little assignments happening
inside LetScoper
relocate alteredLets messiness to compiler package

it's still ugly, but at least now the compiler ugliness
doesn't spill over into an engine class (namely nvm.Procedure)
eliminate Procedure.lets slot

keep it internal to the compiler. this is now one less place where the
compiler has an engine dependency
further code improvement in LetScoper

cut down on the number of points of contact with prim._let.
working towards cutting that dependency entirely