Currently the `getnetworkinfo` returns something like: 

```
"localservices": "0000000000000449",
```

Manually parsing this consistently gives me a headache (see also https://github.com/sipa/bitcoin-seeder/pull/77).

It would be useful to parse this and show the right combination of `NODE_NETWORK`, `NODE_GETUTXO`, `NODE_BLOOM`, `NODE_WITNESS`, `NODE_NETWORK_LIMITED` and `NODE_COMPACT_FILTERS`. In addition the help text for `getnetworkinfo` could be expanded to mention the right BIP numbers for known flags.

There is some ad hoc parsing to populate e.g. `localrelay`, etc (?).  Their help text could also refer back to `NODE_GETUTXO`.

See also: https://en.bitcoin.it/wiki/Protocol_documentation#Network_address
"    \"services\": n,              (numeric) The services offered\n"
            "    \"address\": \"host\",          (string) The address of the node\n"
            "    \"port\": n                   (numeric) The port of the node\n"
            "  }\n"
            "  ,....\n"
            "]\n"
                },
                RPCExamples{
                    HelpExampleCli("getnodeaddresses", "8")
            + HelpExampleRpc("getnodeaddresses", "8")
                },
            }.Check(request);
    if (!g_connman) {
        throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
    }
    int count = 1;
    if (!request.params[0].isNull()) {
        count = request.params[0].get_int();
        if (count <= 0) {
            throw JSONRPCError(RPC_INVALID_PARAMETER, "Address count out of range");
        }
    }
    
    std::vector<CAddress> vAddr = g_connman->GetAddresses();
    UniValue ret(UniValue::VARR);
    int address_return_count = std::min<int>(count, vAddr.size());
    for (int i = 0; i < address_return_count; ++i) {
        UniValue obj(UniValue::VOBJ);
        const CAddress& addr = vAddr[i];
        obj.pushKV("time", (int)addr.nTime);