build: Link asm objects before C

GRUB looks for the Multiboot header in the first 8kb of the kernel. If
it does not find it, it throws an error 13. The multiboot header is
normally defined in an assembly file (e.g. arch/x86/boot/boot.s). To
increase the chances that the multiboot header is included in the
correct place, link the asm files before the C files.

This is essentially a hacky solution to the problem. A better solution
would be to define the multiboot header in the linker script itself.

See: http://wiki.osdev.org/Grub_Error_13
kernel: Flip init_<subsystem>() return value

Return 0 if successful, else return an error code.
kernel: Print a newline between subsystem's output
main: Print a welcome message
Make the s_table architecture-specific

This means that each architecture must implement their own s_table. The
benefits of this is that it means that an architecture is free to
specify it's own subsystems and not rely on the globally available ones,
or pollute the global s_table if #ifdef __ARCHITECTURE_<arch> inclusion
guards.
build: Increase arbitrary warning sizes