* Unwrap `ExceptionInfo` and `ExceptionWithTraceback`
Instead of reporting the `ExceptionInfo` and `ExceptionWithTraceback`
wrappers raised by Celery, report the exceptions that they wrap.
This ensures that the exception in the OpenTelemetry span has a type
and traceback that are meaningful and relevant to the developer.
* Fix typo
The exception is expected, not excepted. Well, I guess it is also
excepted, because it's an exception, but you get what I mean.
* Reformat file with `black`
Reformat the `__init__.py` file in the Celery instrumentation using
`black`, fixing a CI linter error.
* Address review feedback
Use the VERSION attribute exposed by Billiard to decide whether to
import ExceptionWithTraceback.
Add a test for a failing task and check that the exceptions' type
and message are preserved.
* Amend ExceptionWithTraceback import