Compression works! Seems like if I put in arbitrary arithmetic expressions
with only numbers, I'm getting legitimate results, too! Very nice! Next
step: begin merging variable terms.
I think I've done an alright job compressing like-terms in polynomial
expressions. Definitely need to do more testing, but so far it seems to be
doing the right thing. :)

...Well, other than one hold up: I currently have two functions (compress*
and compress+) which have conditions that track constants through hash
tables (this is how we're matching like-terms). However, if a key gets
zeroed out (e.g., we see both "x" and "-x" during compress+), the value
doesn't get culled, so you'll get an output like "(* 0 x)". Not the end of
the world, but obviously not what we want long term.
Kind of fixed up the hash table thing: should be trimming values
appropriately. However, turns out there are some bugs (whoops, forgot mult
and plus chains were compressed!). I think it may be in my best interests
to just try again from scratch, and see if I can make this happen more
nicely. We'll see.