MFH: Fix sanity checks not properly recursively deleting packages

This was manifest as missing dependencies during package building
due to out-of-order builds caused by the queue not having
the proper dependency list because of not rebuilding some
packages when their dependencies were deleted.

This was mostly due to using || on commands which disabled the
set -e handling. By properly recording return statuses and returning
and checking on them sanity_check_pkgs again works.

(This commit on 3.0.x does not fix the issue mentioned, but does make
 the code proper.)

Reported by:	antoine, mat, bdrewery
With help from:	antoine
MFH: Reuse _wait by allowing it to take multiple pids
MFH: Fix hang sometimes in parallel_run/sanity check when reap_children
returns early.