nova: determine number of CPUs

Issue #813
foc: determine number of CPUs

Issue #814
nova: support setting affinity via cpu session

issue #814
base: add affinity support to pager construction

issue #814
nova: add affinity to pager object construction

issue #814
foc: add affinity support to pager construction

Issue #814
nova: create pager/server thread on specific cpus

issue #814
nova: handle main thread inside context area

Fixes #540
nova: show client name for unhandled page faults

ease debugging

Issue #814
nova: map pager cap of main thread to a new PD

Issue #814
nova: delegate exception portals on CPU of caller

Before this commit the exception portals for new threads has been mapped
during the reply from the pager of the new thread. The pager thread may
be located on another CPU as the caller thread - initiation the creation of the
new thread - is running on, so mapping will be denied by the kernel.

Instead map the exception portals on the CPU of the caller thread by calling
its pager and take the pager cap of the new thread as (translate) argument.
The pager code use the translated cap to lookup the pager_object of the new
thread. With that object in hand the pager can map the right exception portals
during the reply.

Issue #814
nova: catch exception when leaving thread::entry()

Catch exceptions and try to make a printf. If this also fails, catch
it and die causing some noise output in core to detect the situation.

Issue #814
base: avoid deadlock if invalid object is called

This avoids a deadlock if during issuing a printf the low level IPC fails.
. Printf uses an address space local lock and if we are trying again
to make a printf we deadlock forever ...

Issue #814
run: extend affinity test

* read out supported number of CPUs
* start per CPU a thread
* monitor by main thread liveness of remote CPU threads
* add a round variable
* terminate run script after a specific round or after 90s
* on qemu wait 5 rounds, on native runs 40

Add run script to autopilot list

Issue #814
base: store initial ax and di registers in crt0.s

The values are used by a follow up commit by nova to get the boot CPU number.

Issue #814
nova: create core threads on boot cpu

The boot CPU is not necessarily 0 as currently assumed for base-nova.
Replace all hard coded values by the actual boot cpu number.

Issue #814
base: add affinity to rpc_entrypoint constructor

Issue #814
nova: unify code for normal and server threads

Issue #814
nova: update doc/nova.txt
run: Rpc_entrypoint test running on multiple CPUs

Issue #814