When using an assumedvalid (snapshot) chainstate along with a background
chainstate, we are syncing two very different regions of the chain
simultaneously. If we use the same blockfile space for both of these
syncs, wildly different height blocks will be stored alongside one
another, making pruning ineffective.
This change implements a separate blockfile cursor for the assumedvalid
chainstate when one is in use.
This is a partial backport of [[https://github.com/bitcoin/bitcoin/pull/27596 | core#27596]]
https://github.com/bitcoin/bitcoin/pull/27596/commits/7fcd21544a333ffdf1910b65c573579860be6a36
Depends on D17895