See extended description

1. One more parameter added to gc() to determine whether to retain or
destroy the black set
2. Freeing black objects - logic fixed (no call to remove_node() was
being made)
3. Check whether object already exists in set before adding it to the
black set
4. Trying out doing GC in eval (experimental; commented out)