Remove outdated comment about Data
Use separate marks for tracking mark state

This allows for using this separate list for concurrent marking. The
marking phase updates these marks, while allocations can still happen
without overwriting existing data.

After the GC phase is complete we copy over the marks during the final
stop the world phase so that for new allocations the new list is used.

This also adds a helper method that can be used to update the mark stack
to make sure it updates any values and removes invalid ones. This can be
used if we have to update the mark stack during concurrent GC.

Introduces an additional argument for process_mark_stack so we can
partially process the mark stack. This can be used so during concurrent
GC we can yield and for example a young collection can happen.