pf_argsort and pf_sort for the element types that need a parquet column, a packed string
store or a temporal element, plus pf_sort for every type and the multi-key pf_sort_keys form.
The six intrinsic types' pf_argsort specifics are one tier down, in
src/parquet_argsort_kernel.f90.
Both are thin: they extract the values into the engine's canonical key form, run the engine, and
-- for pf_sort -- gather the result. No ordering decision is made here.
The int32 permutation forms exist because a caller with a default-kind INTEGER should not be
forced to widen one (CLAUDE.md's "Public numeric arguments"). They compute in int64 and narrow
at the end, aborting rather than truncating when the array is longer than huge(1_int32).