Returns a min (resp max) element from the collection using the provided cmp
function. In case of a tie, the first element encountered while traversing the
collection is returned. The implementation uses fold so it has the same
complexity as fold. Returns None iff the collection is empty.