Use an interface to read iso files, not raw file reading

This moves it all into a FileLoader interface, and creates a LocalFileLoader and HTTPFileLoader class.  We could also add a SambaFileLoader or FTPFileLoader (would have horrible latency.)

Currently, there's no caching, which would make sense before exposing this functionality.  I'm thinking of a fixed-size ram cache (and larger reads.)  We could expose this as a CachedFileLoader class that takes HTTP/Samba as input.  Might do disk caching too but that starts to get complicated (definitely need to do ETag checks and Last-Modified etc.)

Motivation: I don't want to wait while I copy games to my Android just to test them.  I have limited storage space anyway, so to test a decent range of games I would have to wait while they upload, test, plug it back in, delete, upload more, etc.  HTTP makes more sense to me.

Latency on an 802.11n connection is not too bad even without proper caching.  There are fps dips but it's already acceptable I think.  Most likely users with tablets and the like might use this functionality (e.g. when only playing while on local wifi anyway.)

-[Unknown]