Allocate a separate const heap (#159)
Allocate the memory in a separate section, `const_heap`, and don't visit
it during GC.
Output constant objects at the top level for `[1,2,3]` look like:
```c
CONST_HEAP struct list const_list_0 = {
.HEAD.tag = TAG_LIST,
.first = (struct object*)(((uword)3 << kSmallIntTagBits)),
.rest = ((struct object*)kEmptyListTag)};
CONST_HEAP struct list const_list_1 = {
.HEAD.tag = TAG_LIST,
.first = (struct object*)(((uword)2 << kSmallIntTagBits)),
.rest = ptrto(const_list_0)};
CONST_HEAP struct list const_list_2 = {
.HEAD.tag = TAG_LIST,
.first = (struct object*)(((uword)1 << kSmallIntTagBits)),
.rest = ptrto(const_list_1)};
```
Fix #157.
authored by
bernsteinbear.com
and committed by