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
cut dependence of LetScoper on prim._let

the dependency is moved to IdentifierParser instead.  in a way this
only postpones the problem since eventually we want to cut
IdentifierParser's engine dependencies too, but hey, it's progress.
fix bug in ruler.scala lines-of-code counting script

it got confused if there were digits in a package name, e.g. 'parse0'
rename TokenType constants to follow Scala convention
get rid of end1/end2 prims (they are variables!!!)

this is rather amusing.  end1 and end2 are link variables, so they
don't need to also exist as primitives... but they did, and for years
nobody noticed. wtf.

the change shouldn't be visible to users... I don't think. maybe
some error messages might be a little different, something like that?

what finally uncovered the change was my changes to when TokenMapper
runs; instead of the prims shadowing the variables like before,
my changes inadvertently made it so the variables shadowed the prims.

if you look at the Team.txt diffs you'll see that this change causes
us to generate worse code for end1 and end2, because we lose the knowledge
that the end1 and end2 variables always hold turtles, never any other type.
this would be rectifiable by adding an optimization called
"_linkvariableagent" similar to "_turtlevariabledouble", but I don't
think it's important enough to bother with.

note that I don't think it would work to make end1 and end2 be prims
only, or at least, doing so would probably require tearing up a bunch
of code.  it's by analogy with who for turtles and pxcor and pycor for
patches; if those are variables, so must end1 and end2 be.  if we got
rid of the variables I would expect breakage in import/export-world
and perhaps elsewhere.
delay instantiation of Instructions until IdentifierParser

this makes waaaaaaay more sense than having it happen during
lexing. been wanting to make this change for yeeeeeeears.

this is part of my ongoing project of reducing compiler front end
dependencies on engine code.
minor cleanup in LiteralParser
split LiteralAgentParser off from LiteralParser

keeping the import-world-only separate from the regular stuff.
especially since it's the import-world stuff that has all the
dependencies on the agent package, and we're trying to avoid engine
dependencies in compiler code.
Removing now-false doc comments
Cleaning up literal-parsing regex code
fixed test that was leaking JobThreads

so e.g. every time you ran TestPlotModels, four JobThreads were
created that never went away afterwards
fix test that was leaking JobThreads

so e.g. every time you ran workspace.EvaluatorTests,
some JobThreads were created that never went away afterwards
Merge branch 'headless' of github.com:NetLogo/NetLogo into headless
Removing redundant casts
Correcting comment doc variable references
Avoiding '=' on methods of type 'Unit'
Avoiding unnecessary braces on single-item import