Add custom key generator configuration option

- Sometimes the options provide by ignore_params etc don't provide enough control; some sites just do weird things
- To give the implementor more control in determining how a given request should be hashed for caching purposes, create a new Billy config option called key_generators
- Key generators is a hash, keyed by host, of lambdas or procs that receive 3 parameters - HTTP method, URL, and body - and returns either a string to use as the hash key for that parameter, or nil, in which case the existing default hash is generated
- It is left up to the implementor to make sure that these generators return something reasonable to be used in a filename for the cache, and to return the appropriate key for a given request (i.e., to make sure that the same requests return the same keys so they are cached correctly, etc)
non-blocker 

Would moving the key_generator parsing into a separate method be cleaner? like: 

```
  ...
  key = key_from_generator(method, url, body) || default_key(method, url, body, ignore_params)
end

…
private
...

def key_from_generator 
  return nil unless Billy.config.key_generators[url.host] 
  Billy.config.key_generators[url.host].call(method, url, body)
end
```

Or we could do something magical with `Billy.config.key_generators.fetch(url.host, :default_key)` ?