Use while loop over -any?
Drop redundant flycheck-sort-errors
Make level required for flycheck-has-errors-p
Add functions to check maximum error level
Streamline :next-checkers

Instead of mucking about with custom predicate symbols, just specify the
maximum permissible error level.