Explicitly register class-based tasks inheriting from our own class
This lets go of the metaclass madness imported from Celery 3, and goes for an
explicit task registration mechanism as advised in Celery 4.
We do explicit registration of all our tasks in the 'worker ready' signal, just
before they automatically subscribe to the task queues.
Unfortunately that signal is not emitted by the "test fixture" worker, so we
need to explicitly register class-based tasks that are being used in tests. This
doesn't show up for functions as the @task decorator handles registration.