Recurring jobs workout

This PR changed the way how recurring job scheduler works. Before these changes, it used recurring job's `NextExecution` attribute to determine if it is a time to execute a job. And the value of `NextExecution` attribute was updated only when it was time to execute a job. This feature lead to strange behavior when someone wants to change the schedule - if next execution time scheduled to be two weeks later, we have to wait those two weeks before scheduler will apply the new changes.

Now recurring job scheduler works with current time (and uses `LastExecution` to determine skipped jobs). So, there is no need to wait next execution to update the schedule.

Fixes #158 and (maybe) #178.