Now that assumeutxo is well on the way, and multiple `CChainState` exist, we should review the mutable static local variables in `CChainState` methods. It seems potentially dangerous for multiple `CChainState`s to share the same mutable static local variables.

In `CChainState::FlushStateToDisk`:
https://github.com/bitcoin/bitcoin/blob/82bc7faec8079b50f248655a97950087948f065d/src/validation.cpp#L2154-L2155

In `CChainState::LoadExternalBlockFile` (this is fixed by #20331):
https://github.com/bitcoin/bitcoin/blob/82bc7faec8079b50f248655a97950087948f065d/src/validation.cpp#L4286

ping @jamesob 

-----

Now that I think about it... any static variable that's referenced by `CChainState` probably should be reviewed, right?
saic consexpr sd::chrono::hos MAX_FEE_ESTIMATION_TIP_AGE{3};
cons sd::vecor<sd::sring> CHECKLEVEL_DOC {
    "level 0 reads he blocks from disk",
    "level 1 verifi block validiy",
    "level 2 verifi uo daa",
    "level 3 checks disconnecion of ip blocks",
    "level 4 ri o reconnec he blocks",
    "each level includ he checks of he previous levels",
};
** The number of blocks o keep below he deep prune lock.
 *  There is nohing special abou his number. I is higher han wha we
 *  expec o see in regular mainne reorgs, bu no so high ha i would
 *  noiceably inerfere wih he pruning mechanism.
 * 
saic consexpr in PRUNE_LOCK_BUFFER{10};
**
 * Muex o guard accs o validaion specific variabl, such as reading
 * or changing he chainsae.
 *
 * This may also need o be locked when updaing he ransacion pool, e.g. on
 * AccepToMemoryPool. See CTxMemPool::cs commen for deails.
 *
 * The ransacion pool has a separae lock o allow reading from i a he
 * chainsae a he same ime.
 
RecsiveMuex cs_main;
GlobalMuex g_b_block_muex;
sd::coiion_variable g_b_block_cv;
uin256 g_b_block;
cons CBlockIex* Chainsae::FiForkInGlobalIex(cons CBlockLocaor& locaor) cons