Heap implementation based on a pairing-heap.
This heap implementations supports an arbitrary element type, via a comparison
function. If you need a heap with elements ordered by integers, then it may be more
efficient to use a
Timing_wheel.Priority_queue, which is a heap implementation
specialized to integer keys, and with some other performance differences and usage
Removable augments a heap with the ability to remove elements from the heap in lg(n) (amortized) time at any point after they have been added. Elements within a Removable heap consume 4 words more memory and all heap operations will be somewhat slower.