When importing a watch-only address over `importmulti` with a specific timestamp, the wallet's `nTimeFirstKey` will be set to 1.
I think we should add a optional timestamp to `CWallet::AddWatchOnly()` and use it when importing addresses or pubkeys.

throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid P2SH address / script");
            }
            pwalletMain->MarkDirty();
            if (!pwalletMain->HaveWatchOnly(redeemScript) && !pwalletMain->AddWatchOnly(redeemScript)) {
                throw JSONRPCError(RPC_WALLET_ERROR, "Error adding address to wallet");
            }
            if (!pwalletMain->HaveCScript(redeemScript) && !pwalletMain->AddCScript(redeemScript)) {
                throw JSONRPCError(RPC_WALLET_ERROR, "Error adding p2sh redeemScript to wallet");
            }
            CBitcoinAddress redeemAddress = CBitcoinAddress(CScriptID(redeemScript));
            CScript redeemDestination = GetScriptForDestination(redeemAddress.Get());
            if (::IsMine(*pwalletMain, redeemDestination) == ISMINE_SPENDABLE) {
                throw JSONRPCError(RPC_WALLET_ERROR, "The wallet already contains the private key for this address or script");
            }
            pwalletMain->MarkDirty();
            if (!pwalletMain->HaveWatchOnly(redeemDestination) && !pwalletMain->AddWatchOnly(redeemDestination)) {
                throw JSONRPCError(RPC_WALLET_ERROR, "Error adding address to wallet");
            }
            
            if (address.IsValid()) {
                pwalletMain->SetAddressBook(address.Get(), label, "receive");
            }
            
            if (keys.size()) {
                for (size_t i = 0; i < keys.size(); i++) {
                    const string& privkey = keys[i].get_str();
                    CBitcoinSecret vchSecret;
                    bool fGood = vchSecret.SetString(privkey);
                    if (!fGood) {
                        throw JSONRPCError(RPC_INVALID_ADDRESS_OR_KEY, "Invalid private key encoding");