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.
Merge branch 'parallel-aps'