Lock Improvements

This code goes along with #128

It refactors how `Rufus::Scheduler` handles locks (no more need for subclasses!), but more importantly it allows multiple schedulers to run concurrently, with only one of them running jobs at any given time.

Additionally, this fixes a seeming bug with `JobArray#delete_unscheduled`. A job's `@next_time` value can be `nil` or `false` if it never intends to run again, but we only checked for a `nil` value. With the fix, jobs that are scheduled using `scheduled_in`, for example, will get pruned.
So if we have:

```ruby
job = proc { }
scheduler = Rufus::Scheduler.new
scheduler.schedule_in(0, job)
```

Once the job is triggered, its `@next_time` value will be false (since it'll only run once). Shouldn't it get deleted from the jobs array at that point?