pf_lower_bound, pf_upper_bound and pf_equal_range -- locating a value in an array that
is ALREADY sorted.
The target is appended to the array's own key and compared as row n+1. That is the whole
design: there is no compare-a-row-against-a-value arm anywhere, so a search cannot drift from
the order pf_sort produces (feature_risks.md Risk-34). It costs one element of copy.
Searching unsorted input is the worst failure this module can have -- a plausible index, no
abort, no symptom. So sortedness is checked by default, at O(n) in front of an O(log n) search,
and assume_sorted=.true. is the caller's explicit statement that they have established the
order themselves. Do not flip that default.