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.
`start` and `complete` always appear in the same order. Was there a specific reason they are two separate functions?