841289 - perform cleanup on failed registration with activation key

When a client/system/consumer registers with katello, the
creation of the system in katello is handled using a single db
transaction.  In supporting this, it will assign the system
to the activation key, environment, subscriptions, system groups...etc.
In addition, it will create the appropriate records in pulp,
candlepin and elasticsearch.

If an error occurs when creating the katello records (e.g.
system group max members validation error), a DB rollback will
be performed on the transaction.  While this cleans up the
katello DB, it does not affect pulp, candlepin and elasticsearch.

This commit is to addresses that by introducing the after_rollback
callback on the system, candlepin consumer and pulp consumer,
performing the appropriate cleanup in each handler.
834013 - return releaseVer as part of consumer json
cli - introducing debug log level env variable
create __str__() for AsyncJob

just to easy debuging
Simplify AsyncJob by inheriting from AsyncTask
make _task attribute of instance instead of attribute of class
since AsyncJob is instance of AsyncTask, there is no need for wait_for_async_job and we can use wait_for_async_task instead
job without task should not exists, this is error

katello-cli expect always some state

addressing:
2012-08-31 04:22:36,510 [ERROR][MainThread] error() @ base.py:181 - Traceback (most recent call last):
  File "/usr/lib/python2.6/site-packages/katello/client/cli/base.py", line 191, in main
    ret_code = super(KatelloCLI, self).main(args, command_name, parent_usage)
  File "/usr/lib/python2.6/site-packages/katello/client/core/base.py", line 293, in main
    return subcommand.main(self.args[1:], self.args[0], self._get_usage_line(command_name, parent_usage))
  File "/usr/lib/python2.6/site-packages/katello/client/core/base.py", line 293, in main
    return subcommand.main(self.args[1:], self.args[0], self._get_usage_line(command_name, parent_usage))
  File "/usr/lib/python2.6/site-packages/katello/client/core/base.py", line 368, in main
    return self.run()
  File "/usr/lib/python2.6/site-packages/katello/client/core/system_group.py", line 463, in run
    run_spinner_in_bg(wait_for_async_job, [job])
  File "/usr/lib/python2.6/site-packages/katello/client/core/utils.py", line 263, in run_spinner_in_bg
    result = function(*arguments)
  File "/usr/lib/python2.6/site-packages/katello/client/core/utils.py", line 496, in wait_for_async_job
    while job.is_running():
  File "/usr/lib/python2.6/site-packages/katello/client/core/utils.py", line 458, in is_running
    return (len(filter(self._subtask_is_running, self._jobs)) > 0)
  File "/usr/lib/python2.6/site-packages/katello/client/core/utils.py", line 474, in _subtask_is_running
    return job['state'] not in ('finished', 'error', 'timed out', 'canceled', 'not_synced')
KeyError: 'state
853995 - error handling for non-existing systems
853056 - improve 404 generic error message
853056 - system register without environment is working again
cli - removing unused global variable
code cleanup - class Bytes is not used
Merge pull request #553 from xsuchy/pull-req-Bytes

code cleanup - class Bytes is not used
returning back docstring

accidentally removed in dfd722a4ace779edf50df2460698b98d9d0ec35e
fail to build if code contains pylint errors or warnings
cli - pull request review
Merge pull request #572 from xsuchy/pull-req-pylint20

fail to build if code contains pylint errors or warnings
Merge pull request #571 from xsuchy/pull-req-docstring

returning back docstring
cli refactoring - update_dict_unless_none