Lock Improvements

Here's a better attempt at a refactor that allows for a high availability scheduling setup.

* distinguish between a `@scheduler_lock`, which determines if a scheduler should come up, vs. a `@job_lock`, which determines if a triggered job should run
* allow both `:scheduler_lock` and `:job_lock` options so that no subclassing is needed to determine how your scheduler figures out its locking situation
* `:lockfile` option is still supported

Tests are provided for both locking scenarios.

This PR extends on #129, 'cause apparently Github doesn't update closed pull requests.