TaskSets can now contain different kinds of tasks.
TaskSets can now contain different kinds of tasks.

The previous invocation of ``TaskSet(task, args)`` is still supported,
but undocumented and will probably be deprecated in the future.

The new TaskSet syntax is:

    >>> from celery.task.sets import TaskSet, subtask

    >>> ts = TaskSet(tasks=(
    ...     subtask(tasks.add, args=[2, 2])
    ...     subtask(tasks.mul, args=[4, 4]),
    ...     subtask(tasks.add, args=[16, 16]),
    )
    >>> result = ts.apply_async()
    >>> result.join()
    [4, 16, 32]

Where the subtask task takes the following arguments:
    task, args, kwargs, options

Note that this implementation does not take overriden ``get_publisher``,
or ``establish_connection`` methods in account.

Closes #116. Thanks to jonozzz.

ask/celery,mitsuhiko/celery,mitsuhiko/celery,cbrepo/celery,WoLpH/celery,frac/celery,frac/celery,ask/celery,WoLpH/celery,cbrepo/celery