0.0.20.17 — dimensional spawning default + universal block infection compatibility

Defaults
- Dimensional Spawning now defaults ON in the generated common config, Create World fallback defaults,
  per-world settings defaults, and the legacy MapVariables default used by original spawn procedures.
- Existing worlds/config files that explicitly saved false remain respected; this is a default change,
  not a forced migration.

Universal infection compatibility
- The seven legacy infection/spread procedures used BlockState.canOcclude() as a precondition before
  their existing hardness/blacklist/material conversion logic. That prevented many modded/nonstandard
  terrain blocks from ever reaching the actual infection checks.
- Those 13 canOcclude gates now call UniversalInfectionCompat.canInfect(BlockState).
- Ordinary blocks from any namespace can therefore be infected as long as the existing max-hardness,
  phase, and phayriosis:blockblacklist rules permit them.
- Any Block implementing EntityBlock is excluded. This protects persistent/NBT blocks such as chests,
  barrels, modded backpacks, drawers, inventories, storage blocks, machines and other BlockEntity-backed
  content without maintaining per-mod lists.
- LiquidBlock is excluded from the generic terrain fallback.
- No tick scanner, registry sweep, per-mod integration table, or background polling was added.

Patched spread paths
- BloominfectionProcedure
- HivemindhealProcedure
- InfectionProcedure
- NestmindhealProcedure
- NucleusanddreadmindinfectblocksProcedure
- RottingleaflitterinfectionnotbrokenProcedure
- TumorOnTickUpdateProcedure

Continuation rule
- Keep the existing hardness scaling and blockblacklist authoritative. If a mod needs a special block
  protected despite not being a BlockEntity, add it to phayriosis:blockblacklist rather than hardcoding
  a compatibility dependency.
