Add pry development dependency.
Make locks an argument to Scheduler.

Having the lock be an argument makes it easier to implement different
types of locks, since we won't need to subclass from Scheduler and
instead can implement smaller classes.
Prevent running jobs unless a lock is held.

This allows for multiple scheduling processes to run concurrently, but
only one of them will run jobs at any given time.