Improve module loading and allocation

This is a bit of a large pull request.

Probably need to check these first:
 * Metal Gear Solid Portable Ops (Chinese Patch)
 * Kamen Rider Climax Heroes OOO

The overall goal is to make module allocation and memory management more correct.  This means:
 * Allocate from top when specified.
 * Use kernel memory for kernel modules, user memory for encrypted user modules.
 * Eat 0x4000 at the bottom of RAM, normally used for Kernel_Library funcs in userspace.
 * Correct more module info numbers.
 * Leave holes in memory where allocations don't align (and also VPLs etc. I suppose.)
 * Allocate for utility modules (based on 6.60.)
 * Handle dependency requirements when loading utility modules.

This could break a bunch of things.  May want to merge after any dust settles and we're sure we're not doing a follow-up.

-[Unknown]