[GC] Adding array and built-in types

Adding the array and built-in function as data types.

Elevating the idea that integers in the heap are often headers, but
don't have to be. So before, an integer in the heap (BOXSTR_INT) was
assumed to be the header for the contents of a string. Now such an
integer will be tagged with BOXSTR_STRHDR. Likewise the array has
its own header type BOXSTR_ARRAYHDR.

Adding this has neither improved nor degraded the behavior of
gcstringlisp.
[STRINGLISP] Rewrite of the environment table.

The environment table has been rewritten to use the new array and
built-in function types supported by alloc.h.

The enviroment is stored as an array of cons'ed names and functions.
The car of the pair is the name. The cdr of the pair is the value,
and the value can be a built-in function.

At this check-in, the environment implementation based on an STL
vector holding STL pairs containing the name and the value is still
what you get if you compile the source code as is. After this commit,
the compile-time option will be switched to the new implementation.

One of the advantages is that the environment can be a root and all
the values can be traced from that root.

One of the disadvantages is that the environment may cause more GC this
way.

It is debatable whether using the array type is truer to a 'string'
lisp than an STL vector of STL pairs where one or both parts of the
pair may be strings.
Merge branch 'master' of https://github.com/cardiffman/alloc