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
if (data.size() == hash.size() + script_prefix.size() && std::equal(script_prefix.begin(), script_prefix.end(), data.begin())) {
            std::copy(data.begin() + script_prefix.size(), data.end(), hash.begin());
            return ScriptHash(hash);
        }
        
        if ((data.size() >= script_prefix.size() &&
                std::equal(script_prefix.begin(), script_prefix.end(), data.begin())) ||
            (data.size() >= pubkey_prefix.size() &&
                std::equal(pubkey_prefix.begin(), pubkey_prefix.end(), data.begin()))) {
            error_str = "Invalid length for Base58 address";
        } else {
            error_str = "Invalid prefix for Base58-encoded address";
        }
        return CNoDestination();
    } else if (!is_bech32) {
        
        if (!DecodeBase58(str, data, 100)) {
            error_str = "Not a valid Bech32 or Base58 encoding";
        } else {
            error_str = "Invalid checksum or length of Base58 address";
        }
        return CNoDestination();
    }
    data.clear();
    const auto dec = bech32::Decode(str);
    if ((dec.encoding == bech32::Encoding::BECH32 || dec.encoding == bech32::Encoding::BECH32M) && dec.data.size() > 0) {
        
        if (dec.hrp != params.Bech32HRP()) {
            error_str = "Invalid prefix for Bech32 address";
            return CNoDestination();