Fix things -- namely TCP conns not getting recycled

also tried to refactor, will add some inlines w/ notes
I can use an `io.TeeReader` in case of failures if it is necessary to copy the body for any retries so as to only make a copy once-ish. Previously, we were reading the entire contents of the body twice by default which could get expensive for larger messages.