Generalise the file-info code for better portability

This will allow the OSX CFBundle implementation to adhere to a more
general interface, rather than trying to look like Windows' VersionInfo
structures (event though there are extremely similar).