irmin.admin: extract allowlist parsing to its own sublib with tests
The allowlist parser was inline in cmd_serve.ml and therefore untestable
without starting a server. Move it to a new Irmin_admin sublib and add
11 unit tests covering:
- valid multi-entry arrays
- entries with missing or non-string email fields (silently skipped)
- wrong top-level shape ([allow] table instead of [[allow]] array)
- entirely absent [allow] key
- malformed TOML (garbage input) and empty input
- declaration-order preservation
- is_allowed on empty, populated, and case-sensitive inputs
cmd_serve.ml now delegates to Irmin_admin.parse / is_allowed.
Uses Tomlt_bytesrw.decode_string rather than Tomlt.decode_string so
the streaming parser is actually linked (Tomlt's default is a lazy
ref that raises until the bytesrw backend registers itself).