bottler, s3: byte-level upload progress
Bottler's upload progress bar used to tick per-bottle, which looks
frozen for long single-bottle uploads (e.g. a 9 MB bottle over a
flow-control-limited H2 link). Switch the Step 2 / Step 4 progress
bars to count bytes: total = sum of bottle sizes, tick on every disk
read the HTTP layer pulls out of the File body.
S3.put_object_file gains ?on_progress:(int -> unit), wired through by
wrapping the file source with a byte counter before handing it to
Requests.Body.of_stream. Bottler.Upload.upload gains a matching
?on_bytes callback and Release.run feeds it into Tty.Progress.set.
Also reconcile ocaml-xmlt with the recent Textloc refactor:
Xmlt.Error is a module equation to Textloc.Error, the Xmlt.Error
exception aliases Textloc.Error in the implementation, and
ocaml-s3's size_codec uses Xmlt.Error.msgf for decode failures.