Shared memory

Adds preliminary support for kernel shared memory objects. These are memory regions shared by userland applications and OS services. For example, shared memory objects are used for interfacing with the GSP (graphics) and HID (user interface) services. Previously, Citra hard-coded address 0x10002000 for the start GSP shared memory, which is actually only used by libctru homebrew. This branch fixes this.
My point was that documentation doesn't make it clear _why_ it needs to be a pointer or a reference rather than just passed-by-value.