Switch rendering thread pool to pure Python.

Instead of QThreadPool, use a custom implementation based on
concurrent.futures.ThreadPoolExecutor.