Add pretty-printing capabilities and print register environment
Create a proper avalue bounded lattice

This is a rebase of a number of intermediary commits. I've included
below a summary of commentary from squashed commits.

---

Remove syntax objects from the AValue datatype.

Syntax objects prevent symbol string-representation equality, which the
semantics depends on for correctness.

---

Fix path information refinement bug, i.e., co/contra-variance right

Basically, a lookahead can be used in two distinct ways, to ask what is
REQURIED to enter a given branch and what is KNOWN within that
branch. In the case that the lookahead has some constructive evidence,
e.g. the token-register contains NUM, the value case'd on is (state s5),
then the REQUIRED and KNOWN values are equivalent.

If, instead, the lookahead is non-constructive, i.e. the other
conditions all failed, there are two reasonable answers, one more
conservative than the other.

  1. Assume NOTHING is REQUIRED and, conservatively, EVERY VALUE is
     KNOWN to flow into that branch. BOTTOM is REQUIRED, TOP is
     KNOWN. This is the most conservative, valid approximation.

  2. Assume that the negation of the previous conditions is REQUIRED and
     KNOWN. This is the least conservative, valid
     approximation. However, producing this value is non-trivial.

I believe option 2 asks: given some element X, produce an element Y,
such that:

  1. for all Z in the down-set of X, Z meet Y = bottom

  2. X join Y = top

  3. for all Z in (Universe - down-set of X), Z join Y = Z
Keep a single global store for the entire analysis.
Cache the hash code information
Convert the AValue data structure to bit strings

This should be faster than racket/set.