Fix canonicalize headers

When trying to use `.copy` with conditional headers (`x-amz-copy-source-if-match`), I was getting signature failures. It turned out that they ordering of the headers was incorrect, due to the fact that it sorts them as whole headers, not just by the header name. This caused `x-amz-copy-source-if-match` to come before `x-amz-copy-source`.

This fixes it with a custom sort comparator.