tomlt: align with xmlt/csvt/sexpt (Loc.Error, primed variants, limits)
Same refactor as xmlt (d786b041/067b745c), csvt (4e47c14b), sexpt
(ff8c4a47):
- Drop type codec_error ADT (Missing_member, Type_mismatch, Value_error,
Int_overflow, Parse_error, Unknown_member) and codec_error_to_string.
- Add module Loc = Loc, Meta, Path, Error re-exports.
- exception Error = Loc.Error.Error (rebound for [try...with Tomlt.Error]).
- Add decode'/decode_string' primed variants returning (_, Error.t) result.
- Add ?max_depth (default 100) and ?max_nodes (default 10_000_000)
threaded through the parser for billion-laughs / deep-array protection.
- Path/context threading via push_mem_ctx / push_nth_ctx at every
Table.mem / array element / key / mem / nth / update_key descent site.
- Added Invalid_utf8_encode of int exception for encoder UTF-8 bugs.
Dune: (re_export loc) so downstream consumers don't declare loc.
dune-project / tomlt.opam: loc added to depends.
Sublibs (tomlt.bytesrw, tomlt.eio, tomlt.unix): decode* now return
(_, Tomlt.Error.t) result. tomlt_bytesrw converts internal Toml.Error
errors into Loc.Error.t at the boundary.
Tests: 5 new structural context tests using EXACT frame-list match
(missing member, bad value in nested table, bad value in array elt,
bad value in array-of-tables, missing top-level key). Rewrote test
error printers from Toml.Error.to_string (internal parser) to
Tomlt.Error.to_string (unified Loc-based).
369 tests pass (312 codec + 8 bytesrw + 6 unix + 8 eio + 23 jsont +
12 fuzz).
Downstream: ocaml-atp/bin/tangled/test updated.