Use sync.Pool for go1.3 and up

This has the additional benefit of removing the need for a go1.3 branch.
Eliminate a lock in the request hot path

If you're manipulating your middleware stack concurrently with active
requests you're probably doing something wrong, and it's not worth
either the complexity or runtime cost to support you hitting yourself.

We can probably take this principle a bit further and disallow mutating
the middleware stack after any requests have been made (which will
eliminate even more complexity) but that can be a project for another
day.