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
{"command", RPCArg::Type::STR, RPCArg::Optional::NO, "'add' to add a node to the list, 'remove' to remove a node from the list, 'onetry' to try a connection to the node once"},
                },
                RPCResults{},
                RPCExamples{
                    HelpExampleCli("addnode", "\"192.168.0.6:8333\" \"onetry\"")
            + HelpExampleRpc("addnode", "\"192.168.0.6:8333\", \"onetry\"")
                },
            }.ToString());
    if(!g_connman)
        throw JSONRPCError(RPC_CLIENT_P2P_DISABLED, "Error: Peer-to-peer functionality missing or disabled");
    std::string strNode = request.params[0].get_str();
    if (strCommand == "onetry")
    {
        CAddress addr;
        g_connman->OpenNetworkConnection(addr, false, nullptr, strNode.c_str(), false, false, true);
        return NullUniValue;
    }
    if (strCommand == "add")
    {
        if(!g_connman->AddNode(strNode))
            throw JSONRPCError(RPC_CLIENT_NODE_ALREADY_ADDED, "Error: Node already added");
    }
    else if(strCommand == "remove")
    {
        if(!g_connman->RemoveAddedNode(strNode))
            throw JSONRPCError(RPC_CLIENT_NODE_NOT_ADDED, "Error: Node has not been added.");
    }
    return NullUniValue;
}
static UniValue disconnectnode(const JSONRPCRequest& request)