Change main heap to use free list.

Change the main heap to use a free list to maintain a list of free
points. Unfortunately, this won't work in the majority of cases because
the free list hands out any pointer that is free regardless of size.

What we really want is a first fit heap. When adding the first fit heap
into the main heap, weirdness happens that doesn't re-use old pointers.
Investigation into that is next.
Add build/test instructions.