Evict coinbase spends from memory pool during re-org

This is an alternative version of #5267 

It works by having DisconnectTip() lookup the block at height current-COINBASE_MATURITY, and then removing any transactions spending that coinbase (recursively) from the memory pool.

Since re-orgs happen by repeated calls to DisconnectTip(), this will keep the memory pool always consistent, even in the middle of a re-org.

Builds on #5316 

Includes a new regression test.
I think stopping the node (with a state.Abort) is the acceptable when expected information cannot be read from disk. It means something is wrong on a lower level than we can handle.
On the other hand you're right that the mempool is not ciritical, and clearing it would be enough to get past this with consistent state.