Fix things -- namely TCP conns not getting recycled

also tried to refactor, will add some inlines w/ notes
The silly thing is that `URL.Req` marshals the value into a `bytes.Buffer`, passes it to `URL.Request`, which then makes an unnecessary copy of it because it only knows it has an `io.Reader`. After marshaling, we shouldn't have to make any copies.

Maybe a new unexported method that's called by both `URL.Request` and `URL.Req` and takes a `bytes.Buffer`?