(from discussion on IRC. Currently a global `settxfee` has to be changed to override the fee rate, it would make sense to be able to specify it on a per-transaction basis. This would continue #7518)

```
-*- jonasschnelli thinks we should probably add a optional feerate parameter to fundrawtransaction
<wumpus> jonasschnelli: there isn't one yet?
-*- jonasschnelli looking..
<wumpus> I'm surprised, would be so much better than changing a global
<jonasschnelli> no.. i don't think so. Maybe there is a PR.
<sipa> there is a pr
<jonasschnelli> Hard to keep track of everything. :)
<wumpus> no, the PR does it wrong
```

Regarding implementation:

```
<jonasschnelli> The ugly thing is, that CreateTransaction uses the static DEFAULT_TARGET
<wumpus> passing in an optional feerate would be the obvious thing to do
<jonasschnelli> So, this would require some refactoring.
<sipa> just add a confirmation target to coincontrol
<jonasschnelli> Yes. This sounds good.
<wumpus> right, just slap it into coincontrol
<sipa> wasn't there a PR that added a bunch of options to fundrawtransaction?
<sipa> including that
<jonasschnelli> Not the feerate.
<jonasschnelli> But the rest is merged.
```

{
    vCoins.clear();
    {
        LOCK2(cs_main, cs_wallet);
        for (map<uint256, CWalletTx>::const_iterator it = mapWallet.begin(); it != mapWallet.end(); ++it)
        {
            const uint256& wtxid = it->first;
            const CWalletTx* pcoin = &(*it).second;
            if (!CheckFinalTx(*pcoin))
                continue;
            if (fOnlyConfirmed && !pcoin->IsTrusted())
                continue;
            if (pcoin->IsCoinBase() && pcoin->GetBlocksToMaturity() > 0)
                continue;
            int nDepth = pcoin->GetDepthInMainChain();
            if (nDepth < 0)
                continue;
            
            
            if (nDepth == 0 && !pcoin->InMempool())
                continue;
            for (unsigned int i = 0; i < pcoin->vout.size(); i++) {
                isminetype mine = IsMine(pcoin->vout[i]);
                if (!(IsSpent(wtxid, i)) && mine != ISMINE_NO &&
                    !IsLockedCoin((*it).first, i) && (pcoin->vout[i].nValue > 0 || fIncludeZeroValue) &&
                    (!coinControl || !coinControl->HasSelected() || coinControl->fAllowOtherInputs || coinControl->IsSelected(COutPoint((*it).first, i))))