break up commrec
t_commrec currently handles lots of things and goes lots of places. We should break it into pieces as suggested in the checklist.
This will make it much easier to deploy modules that might be exposed by an API, or implement standard interfaces for command-line options, etc.
- multi-simulation handler, including communicator
- physical node communicator - removing various places where we make temporary ones
- DD aspects
- duty aspects - PP vs PME vs both
Remove commrec from hardware detection
This is preparatory refactoring for aspects of #2395
The OpenCL logic was ineffective, because duty is not yet decided, and
anyway we might soon want the detection on PME-only ranks.
Replaced the thread-MPI single-rank assertion with a more direct
Minimized contents of detecthardware.h