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.
I don't think I understand the question. one_thread_per_core is meant to create as many threads as there are cores, and that's what `set_thread_limit` does:
```
  /**
   * Sets the maximum number of threads to be used
   * to the minimum of the environment variable DEAL_II_NUM_THREADS
   * and the given parameter (if not the default value). This
   * affects the initialization of the TBB. If neither is given, the
   * default from TBB is used (based on the number of cores in the system).
   *
   * This routine is called automatically by MPI_InitFinalize. Due to
   * limitations in the way TBB can be controlled, only the first call to this
   * method will have any effect. Use the parameter of the MPI_InitFinalize
   * if you have an MPI based code.
   */
  void set_thread_limit(const unsigned int max_threads = numbers::invalid_unsigned_int);
```
Want to elaborate?