ThreadPoolAllocator allows separating allocations by thread id.
That makes allocations race free. It is possible because
ThreadPoolExecutor class creates threads, keeps them until
the destructor of ThreadPoolExecutor is called, and assigns ids
to the threads. Thus ThreadPoolAllocator should be used with only
threads created by ThreadPoolExecutor. The idea of such allocator
was discussed in D133715 and D133713
Depends on D142317