Improve multithreading when using inner iterations.

Inner iterations by default would use problems where the evaluator
was configured to use exactly one thread for doing the evaluation.
This is fine when there are multiple inner iteration problems
being executed concurrently, but every now and then there are
problem decompositions where there is just one parameter block
in the current independent set and it touches every single
residual block. In such cases it is essential that the evaluator
be configured to use multiple threads.

We now pay attention to the size of the independent set and
dynamically configure the number of threads being used by the
outer loop and the evaluator loop.

Thanks to William Rucklidge for reporting this issue and providing
a test problem to debug.

Change-Id: Iaff9a4ab6d2658cf7b61ea213575d23aab604e3b
1 file changed