cmd/gc: allow runtime to define a hex integer type for printing

As part of the translation of the runtime, we need to rewrite
C printf calls to Go print calls. Consider this C printf:

        runtime·printf("[signal %x code=%p addr=%p pc=%p]\n",
                g->sig, g->sigcode0, g->sigcode1, g->sigpc);

Today the only way to write that in Go is:

        print("[signal ")
        printhex(uint64(g->sig))
        print(" code=")
        printhex(uint64(g->sigcode0))
        print(" addr=")
        printhex(uint64(g->sigcode1))
        print(" pc=")
        printhex(uint64(g->sigpc))
        print("]\n")

(That's nearly exactly what runtime code looked like in C before
I added runtime·printf.)

This CL recognizes the unexported type runtime.hex as an integer
that should be printed in hexadecimal instead of decimal.
It's a little kludgy, but it's restricted to package runtime.
Other packages can define type hex with no effect at all.

Now we can translate that original printf as the more compact:

        print("[signal ", hex(g->sig), " code=", hex(g->sigcode0),
                " addr=", hex(g->sigcode1), " pc=", hex(g->sigpc), "]\n")

LGTM=r, iant
R=r, iant
CC=golang-codereviews
https://codereview.appspot.com/133220043
runtime: run runtime.init

Run it right before main.init.
There is still some runtime initialization that
happens before runtime.init, and some of that
may call into Go code (for example to acquire locks)
so this timing is not perfect, but I believe it is the
best we can do.

This came up because global variables intialized
to func values are done in the generated init code,
not in the linker.

LGTM=dvyukov
R=dvyukov
CC=golang-codereviews, iant, khr, r
https://codereview.appspot.com/135210043