Reworking how pairs are stored and how they are used. Originally an object
was a small header plus an object payload which included two pointers
(car/cdr) for pairs. I didn't really like how his lead the program to be
structured in a number of ways namely that it required a separate boxing
of every value type. Now, each function returns an object by value,
and this object can either be a value type (ie, fixnum/flonum/boolean), or
it can be a reference to a reference type (ie, vector/string/procedure).
Strings are a reference object so we need a deref in read().
Cleaning up use of VECTOR_BASE. Moved deref() into CAR/CDR macros which
cleans up some things.