Support for BIP 23 block proposal

This would aide greatly in ensuring miners aren't messing up blocks, without the expense of losing 50 BTC.
This shouldn't be necessary (but won't hurt): if any CValidationState-updating function sets a non-valid state, it should return false already, so this could be replaced by an assert(state.IsValid());