Refactor libinibin's InibinFile and Loader.

Should probably write a test before merging, because I don't know if my changes broke anything and there's a high chance I've maybe made an off-by-one error or something of the like.
Func<BinaryReader, object> is a delegate which takes in a BinaryReader and returns an object. Delegates are sort of equivalent to c++ std::function, I guess. You can set func to static and member functions - it'll automatically do the equivalent of std::bind if you want to use that nomenclature.