Refactor loader code and add preliminary NCCH support

This branch refactors the ELF/loader code (code responsible for loading bootable files), as well as adds support for loading the NCCH format. NCCH is used for loading the CXI (CTR Executable image) and CCI (CTR Cart image) files used by retail software. For now, there is simply one function that loads the NCCH ExeFS .code section (executable code). Eventually, I'd like to have this abstracted in a nicer way, however I don't expect this to happen until file system emulation has gotten quite a bit more mature.
Again, not new code with this PR, (and the same applies to some subsequent comments), I'll try to clean it up a little and at the very least remove unused code, but I don't really want to rewrite elf.cpp/h right now.