**Is your feature request related to a problem? Please describe.**

If coin selection fails as part of `send` or `sendtoaddress`, the error message returned to the RPC client is `Insufficient funds`, even if the actual cause is due to `too-long-mempool-chain`.  This is likely to alarm users unnecessarily, as they will believe this means their funds have permanently vanished rather than being temporarily inaccessible.

**Describe the solution you'd like**

If coin selection fails due to `too-long-mempool-chain`, the `send` and `sendtoaddress` methods should pass that error back to the RPC client, instead of `Insufficient funds`.

**Describe alternatives you've considered**

It would be even nicer from a UX standpoint if the limit on mempool chain length were removed, but AIUI [that's a DoS vector](https://github.com/bitcoin/bitcoin/issues/9752#issuecomment-281464014), so is not going to happen.

**Additional context**

Apparently this is [already done for `sendrawtransaction`](https://github.com/bitcoin/bitcoin/pull/10015#issuecomment-288597075).  The discussion in https://github.com/bitcoin/bitcoin/pull/10015 is relevant (it appears that the PR was withdrawn for reasons unrelated to my request).

if (nDepth < min_depth || nDepth > max_depth) {
            continue;
        }
        bool tx_from_me = CachedTxIsFromMe(wallet, wtx, ISMINE_ALL);
        for (unsigned int i = 0; i < wtx.tx->vout.size(); i++) {
            const CTxOut& output = wtx.tx->vout[i];
            const COutPoint outpoint(wtxid, i);
            if (output.nValue < params.min_amount || output.nValue > params.max_amount)
                continue;
            
            if (coinControl && coinControl->HasSelected() && coinControl->IsSelected(outpoint))
                continue;
            if (wallet.IsLockedCoin(outpoint) && params.skip_locked)
                continue;
            if (wallet.IsSpent(outpoint))
                continue;
            isminetype mine = wallet.IsMine(output);
            if (mine == ISMINE_NO) {
                continue;
            }
            if (!allow_used_addresses && wallet.IsSpentKey(output.scriptPubKey)) {
                continue;
            }
            std::unique_ptr<SigningProvider> provider = wallet.GetSolvingProvider(output.scriptPubKey);
            int input_bytes = CalculateMaximumSignedInputSize(output, COutPoint(), provider.get(), can_grind_r, coinControl);
            bool solvable = provider ? InferDescriptor(output.scriptPubKey, *provider)->IsSolvable() : false;
            bool spendable = ((mine & ISMINE_SPENDABLE) != ISMINE_NO) || (((mine & ISMINE_WATCH_ONLY) != ISMINE_NO) && (coinControl && coinControl->fAllowWatchOnly && solvable));
            
            if (!spendable && params.only_spendable) continue;