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.
Dunno how I feel about using a range-for here only to manually keep track of the index anyway in a more error-prone way.