- Introduce a new Client type to remove the global variables from the file
- Use the sync package to prevent race conditions with the cache and
enabled flag
- Cache results for IPs, even if the result is nil
There are still data races around the client.Geo variable, but that can be
resolved in a future commit.