Extending the functionality of the package Redis::JobQueue

refs #21, refs #22, refs #23, refs #24

- Fields 'result' and 'workload':
  It is possible to use any data structure (SCALAR, HASH, ARRAY, OBJECT).
  It is automatically serialized.
  Allowable size of the data is determined based on the size of the
  serialized string.
- Added standard fields:
  Times when job was: 'created', 'started', 'completed', 'updated'
  (user settable),
  Job 'progress' (0...1) and arbitrary status 'message'.
  Appropriate methods added.
- The 'updated' field automatically changes with every change to a job.
- Added a method 'elapsed'.
- A set of constants to reflect job status:
  CREATED, WORKING, FAILED, COMPLETED, the user can specify own value
  for status.
  Moved from module Redis::JobQueue to module Redis::JobQueue::Job.
- Added work with the jobs metadata
  (additional information related to the job):
  It is automatically serialized.
  Methods 'Redis::JobQueue::Job->meta_data',
  'Redis::JobQueue->get_job_meta_data'.
- Constant MAX_DATASIZE moved to module Redis::JobQueue.
- No longer used constants EMAXMEMORYPOLICY, STATUS_DELETED, EXPIRE_DELETED.
- Added a method 'queue_status' for monitoring the state of the queue.
- Method 'delete_job' removes Redis data structures that are associated
  with the job.
- Method 'get_jobs' renamed to 'get_job_ids'.
  Jobs can be filtered by queue name or status.
- Method 'add_job' updates to Redis::JobQueue::Job> object, if it was passed
  as the first argument.
- 'encoding => undef' for the Redis used, if 'new' invoked without
  the first argument being an object of 'Redis::JobQueue' or 'Redis' class.
- Exception for not serialized utf8 text fields, when Redis object set
  to 'encoding => undef'.
- Added test using 'utf8' data (t/01_JobQueue/t_utf8.t).
- Added new functionality testing.

Change-Id: Iefe8656663bee89e9743d9cd5582ba132d182704
documentation updates

Change-Id: I425d40bd24d1b7859949e63ec0204d9ba4e7e6ad
Code cleanup and documentation update

Note that from now on queue_status( queue => $qname ) returns number of all jobs in 'all_jobs' hash element
rather than 'all_job'

Change-Id: If705b5bc592c7b4785b9848586877213264a42ec
Change to user-friendly constant names

Change-Id: I7b44102ae6fc8631e9d431c070238009a273150e
Updated methods to obtain job's data.

- Refinement in the description of the method get_job_meta_data

Change-Id: I831096f39571530d3470e7d7b4ae16a5e4487a0e
Translation function on Lua

- Methods redesigned: get_job_data, get_job_meta_data, load_job, delete_job, get_job_ids, queue_status
- Removed unnecessary utility methods
- Small optimizations
- Improved handling of transactions: Added to use the command 'WATCH'
- Method Redis::JobQueue::Job->job_attributes returns a sorted list
- Refined tests
- Minor refinements to the documentation

- Instead of 'JobQueue' used $ NAMESPACE
- Added a utility method _get_job_id
- Documentation fixed on the comments

- Clarified explanation about work with a cluster of servers Redis

- Refinement of calculation Redis::JobQueue::Job->started

- Redis::JobQueue::Job->elapsed always returns a value
- Clarified working with 'elapsed' in the Redis::JobQueue->get_job_data
- Deleted method Redis::JobQueue->get_job_meta_data
- Added method Redis::JobQueue->get_job_meta_fields
- Method Redis::JobQueue::Job->meta_data does not allow matching names with the names of standard fields

- In 'add_job' strengthened protection of the unique identifier generation
- Check the source of job ID is included in the '_get_job_id'

Change-Id: Id33b8bcf13b0eda42c606e052b4b73ccadca8c6e
Exclude the unnecessary use List::MoreUtils::firstidx

Change-Id: I9d795febaf65db1b6b865e6ba82840a317962ec1
* added explicit documentation for supported variables

Change-Id: I2b946a55790bee31d6a3833733d4a51f913d811f