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.
Yeah, my bad, I misread the type of `base` as `u32*` last night. I still think this should be changed though.