Finally! sys::argv now assignable and grabbable. Ugly first patch.

This took longer than it should have, and a couple bugs have been discovered
in the meantime. But first, here's what's new:

* The lexer now understands a new token: '::'. This separates a package from a
  var inside of it. sys::argv, for example, denotes 'argv' within package sys.
* The parser understands getting packages and that subsequent searches should
  be done within a given package. So 'argv' fails, as it should.
* A special merge was added to ast for packages. This may be the wrong way to
  do things, especially since I discovered a maybe-related bug with typecasts
  while testing.
* Package assignment and package value access work, but the opcodes both
  expect packages to be global. So, in the future, something will need to be
  done to allow support for packages in packages. One idea is to use subscript
  and subscript assign (which operate on locals).
* A bug was fixed in list deref. It was checking for flags == 0 to deref, but
  should have been checked for flags & VAL_IS_NIL_OR_PROTECTED. The second is
  necessary because future flags may be added.
* Touched up creation of sys::argv. The list's visited wasn't initialized, and
  duplicate values were being created and leaked. Oops.

Now, here's the bad parts:

* I think the package merge might be replaceable with the usual absorb merge.
* Parser doesn't allow packages themselves to bubble up (if it sees a package
  as a global var, it forces :: next). This keeps lists of packages from being
  made, as well as keeping packages from being assigned to objects. This was
  done so that packages can be 'known' at emit time, meaning that package get/
  set can be written with an index, saving lookups of package info at vm time.
  However, this also prevents show from showing packages. I call this a bug,
  because it keeps show from being awesome.
* Debug's show of o_package_get/set uses index, which is not as useful as
  names (ex: It will show sys, index 0 instead of sys::argv).
* The current package evals in emitter won't work for packages in packages,
  because the current o_package_get/set expect a global opcode. I'm not
  tackling this yet because packages are JUST here.
* sanity needs a bunch of new tests for sys. I need to clear out a few small
  bugs first.
* You can't do 'sys::argv.size()' because parser doesn't understand packages
  insofar as 'what will be the result of this for grabbing a class callable'.
  This is another bug with a long explanation. This is part of why I haven't
  done a sanity test for the new sys package.

The short version? Packages are in, and you can do stuff like 'x = sys::argv'
or 'sys::argv = ["a", "b"]', etc. However, a few little nits are afoot. I've
decided to commit with these nits because I want to finally get this in. It's
taken much, much longer than it should have. Commit first, then touch up the
annoying bits next.