check whether all engines are at HWM in a few places

avoids calling maybe_run on the entire queue when we know that no tasks can be run.
This caused an expensive O(N) operation every time an engine just became not-full,
which is every time a task finishes in the default case of HWM=1.