some fixes for pointers

Added track/loc to places it's missing.

This is mainly for gc->scheme, that when
mutator looks for objects that'd been forwarded,
it will find & use the forwarding location.

Note: assume struct is treated as roots but needs more test.
replace scanning with linked list to find space

In order to do that:

For both collectors, free-list-head is used to hold
head of free space list

Specially for hybrid collector:
update the layout of heap to,
young heap | inter-gen table | old heap -> <- tracing stack
where if old heap objects and tracing stack meet collection
will crash.