correct forwarding pointer usage

Because young generation needs to
be freed after GC, forwarding pointers
need to be stored in local variables
before freed.

So free-1st-gen is delayed till object allocation
if there's forwarding pointers needed by allocation.