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.
This still is weird unique_ptr usage. C99 allows using `u8 buffer[size]` instead here, does MSVC support this?