Fix hop by hop

@sqs how does this look?
As an optimization and simplification, instead of having a separate `containsHeader` func and calling `http.CanonicalHeaderKey` twice for each iteration in this loop (times `len(respHeaders)` from the loop in `getEndToEndHeaders`), what about removing `containsHeader` as a separate function and instead using a `hopByHopHeaders map[string]struct{}`, whose keys are already in canonical header case. Then we don't need a separate function to contain the complexity of the double-for-loop, since the map presence check is a single expression; and we don't need to repeatedly call `http.CanonicalHeaderKey` since we have called it in advance on each possible exactly once.