Autoprune

This pull extends #4515 and #4481 implementing a lightweight sanity check which executes periodically during runtime to make sure the block files needed by the node are present.

There's also a new mode of operation introduced: -pruned, which automatically removes old block files and marks the blocks as pruned.

This should allow to lower the amount of resources needed to run a node.

See the individual commits, and the other pulls for details about all the changes introduced.
Let's not assume that people know what you mean with "prune" at the beginning of the message. Also the warning should not be in the (...), and I'd just say "re-downloading" instead of "a very expensive resync process".

Instead of 

> Run in a pruned state (default: 0 = allow running pruned but do not autoprune; <n> > 0 = automatically prune old block files up to height <n>; <n> < 0 = automatically prune up to last <n> blocks. Warning: going back to be a full node after pruning requires a very expensive resync process. This mode also disables wallet support and is incompatible with txindex)

I'd propose:

> Reduce storage requirements by pruning (deleting) old blocks. This mode disables wallet support and is incompatible with -txindex. Warning: going back to full storage after pruning requires re-downloading the entire blockchain.
> (default: 0 = allow running with missing blocks, but do not delete anything; 
> <n> > 0 = delete up to block height &lt;n>; 
> <n> < 0 = delete all but last &lt;n> blocks)