This adds a kernel C header API endpoint for validating a block without having access to the full UTXO set. The introduced block validation function is intended to be called after having instantiated a chainstate manager and processing the block's header. Following this contract, the block is internally validated by the CheckBlock, ContextualCheckBlockHeader, ContextualCheckBlock, and finally ConnectBlock functions.
The CoinsViewBlock class is introduced to validate user-provided coins from a BlockSpentOutputs against the block spending them. It inherits from CCoinsViewCache and is eventually passed to ConnectBlock. This allows validating the block's scripts and spends against user-provided UTXOs instead of using the chainstate's own internal UTXO set.
This also includes some more API endpoints to populate the coins and retrieve relevant data.
Will keep this draft for now, until I've fuzzed this a bit through rust-bitcoinkernel, and have added a few more test cases.