message: Have importaddress use ImportScripts and ImportScriptPubKeys
  Also removes the now unused ImportAddress and ImportScript from rpcdump.cpp
  Behavior changes:
  * No errors will be thrown when the script or key already exists in the wallet.
  * If the key or script is already in the wallet, their labels will be updated.
diff: @@ -235,42 +235,6 @@ UniValue abortrescan(const JSONRPCRequest& request)
  return true;
  }
  -static void ImportAddress(CWallet*, const CTxDestination& dest, const std::string& strLabel);
  -static void ImportScript(CWallet* const pwallet, const CScript& script, const std::string& strLabel, bool isRedeemScript) EXCLUSIVE_LOCKS_REQUIRED(pwallet->cs_wallet)
  -{
  - if (!isRedeemScript && ::IsMine(*pwallet, script) == ISMINE_SPENDABLE) {
  - throw JSONRPCError(RPC_WALLET_ERROR, "The wallet already contains the private key for this address or script");
  - }
  -
  - pwallet->MarkDirty();
  -
  - if (!pwallet->HaveWatchOnly(script) && !pwallet->AddWatchOnly(script, 0 /* nCreateTime */)) {
  - throw JSONRPCError(RPC_WALLET_ERROR, "Error adding address to wallet");
  - }
  -
  - if (isRedeemScript) {
  - const CScriptID id(script);
  - if (!pwallet->HaveCScript(id) && !pwallet->AddCScript(script)) {
  - throw JSONRPCError(RPC_WALLET_ERROR, "Error adding p2sh redeemScript to wallet");
  - }
  - ImportAddress(pwallet, ScriptHash(id), strLabel);
  - } else {
  - CTxDestination destination;
  - if (ExtractDestination(script, destination)) {
  - pwallet->SetAddressBook(destination, strLabel, "receive");
  - }
  - }
  -}
  -
  -static void ImportAddress(CWallet* const pwallet, const CTxDestination& dest, const std::string& strLabel) EXCLUSIVE_LOCKS_REQUIRED(pwallet->cs_wallet)
  -{
  - CScript script = GetScriptForDestination(dest);
  - ImportScript(pwallet, script, strLabel, false);
  - // add to address book or update label
  - if (IsValidDestination(dest))
  - pwallet->SetAddressBook(dest, strLabel, "receive");
  -}
  -
  UniValue importaddress(const JSONRPCRequest& request)
  {
  std::shared_ptr<CWallet> const wallet = GetWalletForJSONRPCRequest(request);
  @@ -343,10 +307,22 @@ UniValue importaddress(const JSONRPCRequest& request)
  if (fP2SH) {
  throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Cannot use the p2sh flag with an address - use a script instead");
  }
  - ImportAddress(pwallet, dest, strLabel);
  +
  + pwallet->MarkDirty();
  +
  + pwallet->ImportScriptPubKeys(strLabel, {GetScriptForDestination(dest)}, false /* have_solving_data */, true /* apply_label */, 1 /* timestamp */);
  } else if (IsHex(request.params[0].get_str())) {
  std::vector<unsigned char> data(ParseHex(request.params[0].get_str()));
  - ImportScript(pwallet, CScript(data.begin(), data.end()), strLabel, fP2SH);
  + CScript redeem_script(data.begin(), data.end());
  +
  + std::set<CScript> scripts = {redeem_script};
  + pwallet->ImportScripts(scripts);
  +
  + if (fP2SH) {
  + scripts.insert(GetScriptForDestination(ScriptHash(CScriptID(redeem_script))));
  + }
  +
  + pwallet->ImportScriptPubKeys(strLabel, scripts, false /* have_solving_data */, true /* apply_label */, 1 /* timestamp */);
  } else {
  throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid Bitcoin address or script");
  }
  