This PR makes a number of improvements to the InvalidateBlock (`invalidateblock` RPC) and RewindBlockIndex functions, primarily around breaking up their long-term cs_main holding. In addition:
* They're made safely interruptible (`bitcoind` can be shutdown, and no progress in either will be lost, though if incomplete, `invalidateblock` won't continue after restart and will need to be called again)
* The validation queue is prevented from overflowing (meaning `invalidateblock` on a very old block will not drive bitcoind OOM) (see #14289).
* `invalidateblock` won't bother to move transactions back into the mempool after 10 blocks (optimization).
Partial Backport of Bitcoin Core PR15402 (commit 880ce7d):
https://github.com/jasonbcox/bitcoin/commit/880ce7d46b51835c00d77a366ec28f54a05239df
Modified version of "Call RewindBlockIndex without cs_main held"
`RewindBlockIndex` function was removed on D4728, but the locks were moved in`AppInitMain` function.
Depends on D4728