x86: Improve code sharing in vcpu_cell_{init,exit}

vcpu_cell_init() and vcpu_cell_exit() functions are almost identical for
VMX and SVM. They were moved to vcpu.c with vendor-specific bits encapsulated
in vcpu_vendor_cell_init() and vcpu_vendor_cell_exit().

This also required to introduce first data abstraction structure and first
vendor-specific data accessor: vcpu_vendor_get_cell_io_bitmap(). More to follow.
x86: Introduced vcpu_skip_emulated_instruction()

New function provides a vendor-neutral way to skip a VCPU instruction.
Previously, that was done by {vmx,svm}_skip_emulated_instruction(),
which were static and had different signatures.
x86: vcpu_handle_hypercall() made generic

Hypercall handling code is now shared between SVM and VMX.
This required implementing accessors to EFER, RFLAGS, CS and RIP,
and also making vcpu_deactivate_vmm() non-static.
x86: vcpu_handle_io_access() made generic

IO VM exit handling code is now shared between SVM and VMX as well.
This required introducing struct vcpu_io_intercept to communicate
intercepted instruction properties like the port number and access
size between vendor-specific and generic code.
x86: vcpu_handle_pt_violation() made generic

And finally, NPF/EPT violation handling code is now generalized
and shared between SVM/VMX code. To communicate page fault details
between vendor-specific and generic code, struct vcpu_pf_intercept
was introduced, and vcpu_get_guest_paging_structures() was made public
(i.e. non-static). Its signature was also modified to receive cpu_data.
x86: Removed refactoring TODO

Although vcpu_map_memory_region() and vcpu_unmap_memory_region()
look very similar, there is no easy way to extract a common part
from them. Decided not to refactor this code.

Same thing with XSETBV handler: no obvious need to take this
single branch out from {svm,vmx}_handle_exit() now.