Fade out matched blocks

Previously when blocks were matched the would be removed instantly.
Now they have an animated fade out. NOTE: This change now uses the
previously unused BlockState GONE.
the entire thing should really be event driven. anywhere we loop through all the blocks (except to call `tick`) is probably bad and could be done in a much better way