In some marginal listing cases (Nix or Guix for now), we can receive raw file to ingest.
This commit adds a loader to ingest those. The output of the ingestion is a snapshot
with 1 branch, one HEAD branch targetting the file content ingested.
This expects to receive a mandatory 'integrity' field. It is used to check the content
match the declaration.
This can also optionally receive a list of mirror urls in case the main origin url is no
longer available. Those mirror urls are solely used as fallback to retrieve the content.
Note: For the integrity field, some future adaptations will be needed in that code.
It's kept out of the scope of this diff to avoid depending on a new release
of the model [1]
Related to T3781
Supersedes D8406
[1] D8582