Can we add more information in error messages for invalid address especially the errors mentioned in PR: https://github.com/bitcoin/bitcoin/pull/20832/

Example: 

Change https://github.com/bitcoin/bitcoin/blob/f385ad765174afb02e60900581612a19c143cf83/src/key_io.cpp#L103

To

```C++
error_str = "Invalid prefix for Bech32 address. Valid Bech32 address starts with `bc1` (mainnet) or `tb1` (testnet)";
```

Context: https://github.com/bitcoin-core/gui/pull/280#issuecomment-820957002
{
    CExtKey key;
    std::vector<unsigned char> data;
    if (DecodeBase58Check(str, data, 78)) {
        const std::vector<unsigned char>& prefix = Params().Base58Prefix(CChainParams::EXT_SECRET_KEY);
        if (data.size() == BIP32_EXTKEY_SIZE + prefix.size() && std::equal(prefix.begin(), prefix.end(), data.begin())) {
            key.Decode(data.data() + prefix.size());
        }
    }
    return key;
}
std::string EncodeExtKey(const CExtKey& key)
{
    std::vector<unsigned char> data = Params().Base58Prefix(CChainParams::EXT_SECRET_KEY);
    size_t size = data.size();
    data.resize(size + BIP32_EXTKEY_SIZE);
    key.Encode(data.data() + size);
    std::string ret = EncodeBase58Check(data);
    memory_cleanse(data.data(), data.size());
    return ret;
}
std::string EncodeDestination(const CTxDestination& dest)