[xla:cpu] Use recursive work splitting to submit host tasks
[xla:cpu] Use recursive work splitting to submit host tasks

This significantly improves wall time to submit tasks into a thread pool:

BM_HostKernelAsyncLaunch/1/process_time    15.4ns ± 0%          15.0ns ± 4%   -2.84%
BM_HostKernelAsyncLaunch/4/process_time    7.99µs ± 3%          7.53µs ±34%   -5.72%
BM_HostKernelAsyncLaunch/8/process_time    18.5µs ± 3%          17.6µs ±30%   -4.84%
BM_HostKernelAsyncLaunch/16/process_time   39.4µs ± 2%          25.0µs ±12%  -36.50%
BM_HostKernelAsyncLaunch/32/process_time   81.5µs ± 2%          31.3µs ± 9%  -61.63%
BM_HostKernelAsyncLaunch/64/process_time    165µs ± 3%            33µs ± 7%  -79.91%
