Fix #650: use a card table to mark dirty sections of mutable arrays