The fix was inspired by the source code for UCBLogo, which doesn't have this bug.
UCBLogo copies inputlist so that modifications won't affect any of the caller's variables.
However, instead of calling "append(argl, NIL)" this revision creates a new function
with a clearer name "copy_list(argl)".
Also, instead of always copying the list in APPLY, the list is only copied if the
procedure is the name of a primitive, since that's the only way (to my understanding)
the list could be modified. This was partly to only incur the overhead of copying
the list when a copy was needed, but also for clarity: the fix closer to the code
path that needs it.