kernel/asr: Fix -Waddress on gcc47.

gcc47 was complaining about two cases where an address that could never
be NULL was checked against NULL in the SG() macro. Work around it by
using a pointer in between.
kernel: Disable -Winline and -Wunused-but-set-variable for buildkernel.

-Winline's behavior is kind of unobvious to fix without further knowledge
about how the compiler decides what can be inlined and what not. A better
solution might be to remove "inline" from most declarations and instead
use __always_inline for what we absolutely need to inline.

-Wunused-but-set-variable (a gcc47 specific warning) is nice and can
point at places that need cleaning up (which we did for a lot of its
warnings) but at the end of the day, it doesn't catch many real bugs and
it also warns about some cases that we'd like to stay as they are, simply
because it's more convenient or would result in unnecessarily silly code.
We also moved it to WARNS=6 (from WARNS=2) for userland code.

Thanks to aggelos and sephe for sharing their thoughts.
kernel: Turn on -Werror for the gcc47 buildkernel.
msk.4: Document hw.mskc.msi.enable.