first implementation of memcard from directory, creates a memory card from USERDIR/GC/<REGION>/Card <A/B>
Savestates include the entire memorycard, but the only saves that should be modified are the ones that are directly modified by the game
the others are preserved merely to avoid changing the memory card header during the game as some games (Zelda) refuse to save
small cleanup, remove duplicated functions

remove old comment
bump the save state version, and fix a stupid mistake I made while cleaning up
Add a migration feature that auto imports all saves from your default memcard to the new memcard dir if it doesn't exist.

remove a debug message that I inadvertently added last commit
check region of GCI files when loading, notify user of save files that do not belong to this region

fix issues caused by rebase
create the full save file even if some blocks are never written to. prevents creating invalid gci files (ex: last two blocks are never used because it is for file 3,  most tools will still expect the gci file to be BLOCK_SIZE*block count + gciheader size)

Actually "delete" save files by renaming to s/*.gci/*.gci.deleted/
don't assume contiguous blocks in memcard dir access.

probably insignificant slowdown compared to contiguous access, but prevents the user from shooting themselves in the foot by somehow forcing a fragmented file (deleting/moving files around in IPL/SysMenu) and destroying it because we assumed it was contiguous.
Tested with an artificially fragmented save due to the ease compared to causing the fragment within an emulated state
add some sanity checking to loading gci files. reject files whose filesize does not match size recorded in header, duplicated internal filenames, and files whose recorded block count is larger than the largest possible memory card.

clear save data and used blocks when a file is deleted
more sanity checking. ensure that no more blocks are loaded than are available on the virtual memorycard
move common code to a single function
move clearBlock to be next to the similar Read and Write functions
read/write DMA blocks in order, check for write errors when flushing gci files to disc
implement DMAWrite