Okay, after a bit more thought I think I have a simplification that helps avoid proliferating wrapper code and is still consistent with the way we use envy.  The configuration entries would still be done per-app (given separate config files, no way to avoid that), but I'm not sure if we can cleanly avoid that: 

```
to_ip(AppKey, Host) -> 
    Preferences = envy:get(AppKey, ip_mode, [ipv4], list),
    to_ip(Host, Preferences).
```

The other option, perhaps even simpler but @ expense of needing a dedicated `envy` config block, would be: 
```
to_ip(Host) -> 
    Preferences = envy:get(envy, ip_mode, [ipv4], list),
    to_ip(Host, Preferences).
```