printnum() is no longer recursive

When printing a full 64 bit pointer in hex (16 'digit's), printnum()
consumed over 1KB of stack, which can run off the end of the kernel
stack.  We use about 80B per frame.

I'm not concerned about the repeated divisions; the actual output is far
more expensive than that, last I checked.