Fix things -- namely TCP conns not getting recycled

also tried to refactor, will add some inlines w/ notes
A quick test shows that the body must be reinitialized. If you don't believe me: http://play.golang.org/p/CyIWdcf47X

(But you can't run it on the playground since the playground doesn't give you network access.)