Add a completionTimeout to kill long running requests

Adds a completion timeout to handle killing long running requests. The timeout defaults to false and must be explicitly defined in the configuration.
Consistent between how we pass `connectTimeout` and `completionTimeout` - one is passed explicitly as the first argument, one is passed hidden in the options as the last argument.