This picks up the closed pull request #21030 and is the first step toward fixing #21220.
The basic idea is to move all disk access into a separate module with benefits:
- Breaking down the massive files init.cpp and validation.cpp into logical units
- Creating a standalone-module to reduce the mental complexity
- Pave the way to fix validation related circular dependencies
- Pave the way to mock disk access for testing, especially where it is performance critical (like fuzzing)