Fixes #35050
The m_blocks_unlinked map keeps track of blocks that have transactions but whose parent (or any ancestor) does not. This happens when a block is received before its parent, or during a reorg, when FindMostWorkChain() encounters a block whose ancestors were pruned.
The bug this PR addresses is a rare interaction of these two cases, which happens on startup when BlockManager::LoadBlockIndex() rebuilds m_blocks_unlinked. The check there only considers whether a block has transactions, and pruned blocks keep nTx > 0 but clear BLOCK_HAVE_DATA. So if there's a pruned block on a stale fork whose parent has no transactions, that block is added to m_blocks_unlinked without having data on disk. This violates an assertion in CheckBlockIndex().
Get rid of this unintended case by gating on BLOCK_HAVE_DATA before adding to m_blocks_unlinked.