Using rayon for this task ensures that we are using the same work-stealing
threadpool for everything.
This change introduces crossbeam as an explicit dependency, although it is
already a dependency of rayon. It provides better structures for
multi-threaded tasks than the stdlib.