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
#include <key_io.h>
#include <base58.h>
#include <bech32.h>
#include <util/strencodings.h>
#include <algorithm>
#include <assert.h>
#include <string.h>
static constexpr std::size_t BECH32_WITNESS_PROG_MAX_LEN = 40;
namespace {
class DestinationEncoder
{
private:
    const CChainParams& m_params;
public:
    explicit DestinationEncoder(const CChainParams& params) : m_params(params) {}
    std::string operator()(const PKHash& id) const
    {
        std::vector<unsigned char> data = m_params.Base58Prefix(CChainParams::PUBKEY_ADDRESS);
        data.insert(data.end(), id.begin(), id.end());
        return EncodeBase58Check(data);
    }
    std::string operator()(const ScriptHash& id) const