Added ability to change task name generation behavior

One of the most exciting Celery features is that you can configure almost everything without doing a method copy-paste-and-change-one-line . Unfortunately, right now we can't change the task naming behavior.

This PR allows users to have their own name generators without overriding `_task_from_fun` at all.