libretro subsystem API

I've implemented subsystem support to the libretro API (SET_SUBSYSTEM_INFO). This allows us to express more complicated game loading scenarios. Each subsystem requires a certain number of ROMs, some optional, others not.

I have removed SNES-specific systems from libretro.h, and we can now load these odd-ball ROMs like:

    retroarch -L snes-core.so --subsystem sgb gameboy.gb sgb.rom

This needs core support, but can easily be implemented when this is merged. Each ROM can also signal which RAM types it supports, along with the extension associated with that RAM slot. This allows supporting weird cases where one ROM has multiple RAM chips.

To do this, I had to refactor stuff considerably and it allowed easy support for temporary folder for extraction, which was requested by people using read-only file systems to store zipped ROMs.