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.
Very good question, the answer isn't obvious to me.

return state.Abort() if block-100 couldn't be read would be trivial, but it seems a shame to get stuck on a bad fork if you can't read block-100 because your disk went bad.  Although I suppose if your disk is going bad you want to know sooner rather than later. 

A safe alternative would be to mempool.clear() if this read fails.