minor refactoring & bugfixes to memory.c
- add memcell_is_* to simplify list owner check
- add allocation count and free count to ALLOC_DEBUG output
- fix "double free" condition where if there is a reference loop, a node may be moved to the free list, then pulled back into free_pending when its predecessor is pulled from free_pending. -> add check to ensure that a node is not already in free before adding to free_pending
- update move_to_roots to differentiate between 'processed' roots and 'unprocessed' roots -> 'processed' go after sentinel, 'unprocessed' before.