http, s3: move RFC 7230 header-value canonicalisation to ocaml-http
The SigV4 signer and the HTTP headers module were both carrying
(or about to carry) the same RFC 7230 §3.2.3 'conditional whitespace'
rule: trim/collapse outside a double-quoted string, preserve verbatim
inside quotes. Only one of them should own it.
- http: new Headers.canonicalize_value with the full rule,
documented in the mli with examples and spec pointer. Four unit
tests (plain / quoted / escaped quote / tab collapse).
- s3: SigV4's canonical_headers now calls Http.Headers.canonicalize_value
instead of the duplicated implementation. Interop + unit tests
still pass.
Second caller for the generic function — HTTP parsers and HPACK
validators would be the next ones — so it now lives in the
generic HTTP package rather than as a private helper in s3.