Storage can contain custom state handlers
Job fetching is now works within a worker connection

- Connection usage was greatly reduced
- New fetching mechanism is used in Redis fetcher.
Reduced lifetime of the IMonitoringApi instance

Previous implementation cause TransactionAbortedException,
Allowing processing (but crashed) -> processing state transition
Changed some sql server storage implementation details

1. SqlJobLock uses sp_getapplock instead of transaction with repeatable
read. Previous method was the cause of great performance degradation due
to excessive locking.
2. SqlWriteTransaction buffers commands and sends them only on commit
within a transaction. As a result, transaction takes less time to
complete.