NewClient returns a Client which is used to fetch keys from a supplied endpoint.
It will attempt to cache the keys returned before returning. If an error
occurs, it will return an error (with the instantiated Client).
GetKey returns a key for a given key id.
It first looks in the Client's cache and if it can not find a key it
will attempt fetch the key from the endpoint directly.