Caseless compares and hashes strings ignoring case, so that for example
Caseless.equal "OCaml" "ocaml" and Caseless.("apple" < "Banana") are true, and
Caseless.Map, Caseless.Table lookup and Caseless.Set membership is
case-insensitive.
ascending is identical to compare. descending x y = ascending y x. These are
intended to be mnemonic when used like List.sort ~cmp:ascending and List.sort
~cmp:descending, since they cause the list to be sorted in ascending or descending
order, respectively.