Add a version of MPI_InitFinalize that adaptively determines the number of threads

Add an option to MPI_InitFinalize to choose the number of threads adaptively in such a way that all cores are used.
Ah, ok. So maybe one_thread_per_virtual_core? That's a mouthful. I could also just document the issue by defining a "core" as one execution entity as reported by the operating system. Ideas?