Refactor retries

- Tweaked the `.request` method a bit so I could wrap the callback passed to `req.end`. This is so I could patch an error code for timeouts so that we stop relying on superagent specific error stuff. As a side effect, I think `.handle` is no longer needed since I didn't put the error wrapping in there so we'd have the same `err, res` semantics everywhere (even if an integration forgot to use `.handle`).
- Moved the retries stuff into a little module.
- Added a couple new codes based on some log data.

cc: @yields