Fixed Slow Rift Regeneration and Various Improvements

Fixed slow rift regeneration in dimensions with many rifts by implementing scheduled regeneration. NewDimData tracks which links exist in each chunk. When a chunk is loaded, the links in a chunk are all queued for regeneration. The same mechanism is used when rifts are replaced with other blocks and when dimensional doors are broken - with a shorter waiting time in the latter case.

I also streamlined some of the code in minor ways by moving boilerplate checks around certain functions into the functions themselves, and I removed unnecessary functions. The most noteworthy among those side changes is that blocks schedule their regeneration through the breakBlock() event, instead of relying on overriding invalidate() in our tile entities. That change was meant to reduce the checks needed to decide whether to schedule regeneration, but I later realized it eliminated only one or two checks, so the gains were small.