libkernel: Make initialization code less fragile

Binutils 2.24 includes a change for x86_64 that results in accesses to
image-local symbols being changed to direct RIP-relative accesses to
the symbol rather than going through the GOT. This breaks the assumption
in the init code that we have to add load_base onto the libkernel_image
address before relocations are done. Since it seems like it is arch-
specific whether or not &libkernel_image will give an absolute or load
base-relative address before relocations are done (and possible to change
in future, as has just happened with binutils 2.24), moved the early init
and relocation code completely to arch-specific code. Now by the time
libkernel_init is called, the relocations will have been done.

Signed-off-by: Alex Smith <alex@alex-smith.me.uk>
Update toolchain to Binutils 2.24 and LLVM/clang/libc++ 3.4

Signed-off-by: Alex Smith <alex@alex-smith.me.uk>