Provides a general implementation of heap sort usable for sorting arbitrary
data items. Move and comparison procedures are provided by passing
access-to-procedure values. The algorithm used is a modified heap sort
that performs approximately N*log(N) comparisons in the worst case.
This differs from
GNAT.Heap_Sort in having a less convenient
interface, but may be slightly more efficient.