Let APs start up other APs in parallel

An atomic index to the shared array of LAPIC IDs is used to let new APs
start other ones after they initialised themselves. This proves that the
AP LAPIC configuration works and should still speed up the boot process.
Remarkably for larger CPU number configurations, according to my tests. The
new code, even without APs waking other APs, handles 64 CPUs gracefully.
However, I'm not sure if it is reliable on real machines because it does not
wait for the SIPI to be ACK'd but checks only once after sending all IPIs
that all CPUs are started which may hang. Boot-up now finishes almost
immediately.

The (commented-out) wait(200) call in the AP startup code was buggy because
wait() does not preserve the %rdx register on which the calling code relies
desperately.

Each CPUs gets a per-cpu area. For each CPU, the initialisation code sets up
the environment so that:

%rsp -> stack grows downwards
high addresses |
               | 4 KiB
               |
--------------------
               |
               | 4 KiB
low addresses  |
%r15 -> per-cpu area grows upwards

The per-cpu areas are meant primarily for the CPUs' thread stacks.
Support %c in printf()

This is kind of helpful for testing the keyboard driver.

Well, I wasn't that productive today because I decided to begin backing up
my hard drive. The only thing was that I used rsync with --delete and
erroneously exchanged source and destination operand. Yeah, that was my
afternoon and evening: desperately trying to get the lost data back somehow
and by the way setting up the mess that calls itself systemd. I really
appreciated sysvinit and I think I'm going to ultimately leave what was once
Arch Linux - or what once used to be KISS.
Support tabulators in printf()

This one is a must! Naturally, they are 8 characters wide.