A priority queue implementation. Items with the highest priority (as defined
by the supplied predicate) come off the queue first. You can change the
order of the queue by supplying a custom predicate, or overriding opCmp
on the type being queued.
Fetches a reference to the highest-priority element in the queue.
Removes the highest-priority item from the queue. The queue must not