Fix issue where X-Amz-Content-SHA256 was being set twice

More fallout from the fact that we resign requests.  There
was this Content-SHA256 header that did not have the "delete if
already present" logic, which would cause errors when retrying
S3 sigv4 requests because we would not be signing the requests
properly.

I've added a unittest as well as an integration test to ensure
we don't regress on this in the future.

cc @kyleknap @danielgtaylor