Add `http.Agent` support

I went semi-retard started refactoring things to use more components, but then decided to just focus on the `agent` option stuff, hence this PR is a little bit unfocued/has more commits than necessary.

It's all good stuff though :p