kvmclock: ensure _boot_systemtime is set only once.

Eeach vCPU is executing kvmclock::setup_cpu() which modifies a shared
variable kvmclock::_boot_systemtime, which is used as a base for
osv::clock::uptime. This race was causing osv::clock::uptime to
appear as moving backwards during boot time when _boot_systemtime
was bumped up by another CPU when it was initializing its clock.

This patch also ensures proper memory ordering between _smp_init and
_boot_system_time.

This is (apparently) making this assertion failure go away:
[backtrace]
0x00000000003b54ae <sched::timer_list::fired()+1054>
0x000000000036de66 <interrupt_descriptor_table::invoke_interrupt(unsigned int)+166>
0x000000000036df59 <interrupt+41>
0x000000000036cb4c <interrupt_entry_common+34>
0x000000000038df3a <AcpiPsCreateOp+218>
0x000000000038d81d <AcpiPsParseLoop+349>
0x000000000038eb97 <AcpiPsParseAml+567>
0x00000000003762ff <AcpiDmParseDeferredOps+927>
0x0000000000376490 <AcpiDsGetRegionArguments+64>
0x0000000000388d3b <AcpiNsExecModuleCodeList+875>
0x000000000038ba50 <AcpiNsWalkNamespace+288>
0x000000000038c155 <AcpiWalkNamespace+165>
0x0000000000388ed1 <AcpiNsInitializeObjects+65>
0x00000000003989c4 <AcpiInitializeObjects+100>
0x000000000035ace5 <acpi::init()+21>
0x0000000000210346 <main_cont(int, char**)+326>
0x00000000003b7faa <thread_main_c+26>
0x000000000036cb75 <thread_main+7>
0x0000000000d19f4f <workman::_duty+2566>

Signed-off-by: Tomasz Grabiec <tgrabiec@cloudius-systems.com>
Reviewed-by: Nadav Har'El <nyh@cloudius-systems.com>
Signed-off-by: Avi Kivity <avi@cloudius-systems.com>