Working on FETools::extrapolate in parallel

The FETools::extrapolate function does not work in parallel, because there can be patches with childs of childs ... which are artificial, but interpolation on a patch needs dof values of this cell. The idea is, to store the dof values needed to a list, send the data around to all processes and do the interpolation patch-wise.
All functionality is implemented in a struct CellDataHelpers, so the code is a bit more readable, hopefully, but this is work in progress, maybe some parts, for example sending data around, can be done more efficient and more elegant. If someone has an idea, great!!
I think I don't understand this algorithm. Maybe a high level description would help. If I understand correctly, every process sends every cell to the root process (zero) which then sends data back out. This is not scalable to large problem sizes and you need to rework the algorithm: you need to figure out which processor needs what, and then send only that via point-to-point algorithms. `Utilities::MPI::compute_point_to_point_communication_pattern()` can help you figure out which processor you can expect something from.

As a general rule, in your code above, you have something like
```
  for (process=0...N_processes)
    if (something)
      receive
    else
      send
```
This is an inefficient protocol because you wait with sending until you have already done some other work. A better approach is to send everything you need to send right away, and only then start receiving and processing data.