Stop using where()
This debugging aid causes several of branches per MD step, and dozens of them on global-communication steps. Even if they were implemented in a no-cost way, we should be using debuggers, not printf.
Use gmx::Mutex and gmx::lock_guard to fix some issues
Refactored a few uses of raw thread-MPI mutexes to fix known leaks, so
valgrind and LeakSanitizer become more useful.
Discovered that the thread-MPI trylock behaviour has always been buggy
on Windows, and cannot be fixed so that the return code is consistent
across the two current implementations in the case where the calling
thread might already own the lock. Fortunately, we don't use trylocks
anywhere, and the problematic case is unlikely to occur, but the
limitation is now documented.
Added unit tests for whichever mutex implementation we are using, now
and in the future. These cover the above case.
Found bugs in _where, which presumably wasn't an issue if it only
ran when handling errors. But it runs multiple times per MD step.
Remove use of where(), if DEBUG etc.
The where() debugging function causes run-time branches in
release-mode builds, and replaces functionality for which one should
use a debugger.
Other such preprocessing clutter should also go away. Since we don't
check whether any of it compiles or produces useful data, we may as
well delete it.
This coincidentally simplifies the call sigatures of some
Retained some useful essentialdynamics debug code, which is now always
compiled, and written from setup code only at debug level 2.