An amortized running time is given for each operation, with n
referring to the size of the priority queue. These bounds hold even
in a persistent (shared) setting.

Note: Many of these operations have the same names as similar
operations on lists in the Prelude. The ambiguity may be resolved
using either qualification or the hiding clause.

Unlike Data.IntervalMap.FingerTree, this version sorts things so
that the largest interval from a given point comes first. This way
if you have nested intervals, you get the outermost interval before
the contained intervals.