message: [mempool] simplify some check() logic
  No transaction in the mempool should ever be a coinbase.
  Since mempoolDuplicate's backend is the chainstate coins view, it should
  always contain the coins available.
diff: @@ -690,14 +690,12 @@ void CTxMemPool::check(CChainState& active_chainstate) const
  if (it2 != mapTx.end()) {
  const CTransaction& tx2 = it2->GetTx();
  assert(tx2.vout.size() > txin.prevout.n && !tx2.vout[txin.prevout.n].IsNull());
  + setParentCheck.insert(*it2);
  + }
  // We are iterating through the mempool entries sorted in order by ancestor count.
  // All parents must have been checked before their children and their coins added to
  // the mempoolDuplicate coins cache.
  assert(mempoolDuplicate.HaveCoin(txin.prevout));
  - setParentCheck.insert(*it2);
  - } else {
  - assert(active_coins_tip.HaveCoin(txin.prevout));
  - }
  // Check whether its inputs are marked in mapNextTx.
  auto it3 = mapNextTx.find(txin.prevout);
  assert(it3 != mapNextTx.end());
  @@ -752,8 +750,8 @@ void CTxMemPool::check(CChainState& active_chainstate) const
  TxValidationState dummy_state; // Not used. CheckTxInputs() should always pass
  CAmount txfee = 0;
  - bool fCheckResult = tx.IsCoinBase() || Consensus::CheckTxInputs(tx, dummy_state, mempoolDuplicate, spendheight, txfee);
  - assert(fCheckResult);
  + assert(!tx.IsCoinBase());
  + assert(Consensus::CheckTxInputs(tx, dummy_state, mempoolDuplicate, spendheight, txfee));
  for (const auto& input: tx.vin) mempoolDuplicate.SpendCoin(input.prevout);
  AddCoins(mempoolDuplicate, tx, std::numeric_limits<int>::max());
  }
  