Refactor `process_tree` and `main` logic for throttled threading.

All threads are started in a separate process now, which allows us
to easily cap the number allowed to run concurrently. This also
allows us to have better control of how examples are marked as
complete. I.e., this is a lot more sane now.