Improve the loader a bit

Clean up the loader to open the file only once and pass the IOFile around to functions requiring it, and add a real file detection function based on its magic.
If you really need to use the index explicitly, at least use `const auto& section = ..section[i]` at the beginning.