Allow runs that have jobs with missing packages to schedule.
Runs that have jobs with missing packages will now schedule successfully
instead of throwing an exception and sending an email of the failure.
However, the jobs with missing packages are tracked and printed when
--dry-run is used.
Extracted the code that did these checks from schedule_suite so that it
could be reused elsewhere. Wrote unit tests on these newly extracted functions.