Use case: **decouple keys from the wallet** (via importing scripts and fundrawtransaction with watch-only).

**Problem:** multisig inputs are flagged as non-spendable even if importing both the multisig P2SH `scriptPubKey` and the `redeemScript` (via importmulti).

The current `isSolveable()` logic calls `GetPubKey()` and only flags them as solvable if the pubkeys are **in the wallet**.

**Expected behaviour:**
* multisig Inputs should be flagged as solvable (and therefore usable via fundrawtransaction) when importing the P2(W)SH `scriptPubKey` and the `redeemScripts`

Current workaround:
* Call importpubkey for all pubkeys used in the multisig (redeemScript). importpubkey derives all coming scripts (including a raw P2PK script). The P2PK scripts make the wallet store the pubkey and flag the multisig script solvable.
{
    return m_provider->GetPubKey(keyid, pubkey);
}
bool HidingSigningProvider::GetKey(const CKeyID& keyid, CKey& key) const
{
    if (m_hide_secret) return false;
    return m_provider->GetKey(keyid, key);
}
bool HidingSigningProvider::GetKeyOrigin(const CKeyID& keyid, KeyOriginInfo& info) const
{
    if (m_hide_origin) return false;
    return m_provider->GetKeyOrigin(keyid, info);
}
bool FlatSigningProvider::GetCScript(const CScriptID& scriptid, CScript& script) const { return LookupHelper(scripts, scriptid, script); }
bool FlatSigningProvider::GetPubKey(const CKeyID& keyid, CPubKey& pubkey) const { return LookupHelper(pubkeys, keyid, pubkey); }
bool FlatSigningProvider::GetKey(const CKeyID& keyid, CKey& key) const { return LookupHelper(keys, keyid, key); }
FlatSigningProvider Merge(const FlatSigningProvider& a, const FlatSigningProvider& b)
{
    FlatSigningProvider ret;
    ret.scripts = a.scripts;
    ret.scripts.insert(b.scripts.begin(), b.scripts.end());
    ret.pubkeys = a.pubkeys;
    ret.pubkeys.insert(b.pubkeys.begin(), b.pubkeys.end());
    ret.keys = a.keys;
    ret.keys.insert(b.keys.begin(), b.keys.end());
    return ret;
}