TEVAT & DGVMA : speedup guest virtual memory access with shm-snapshot

Transparent Efficient Virtual Address Translation (TEVAT):
Create a shadow mapping table of shm-snapshot in LibVMI address space, so MMU can help us translate the guest virtual address to physical one, bypassing vmi_translate_kv2p() and vmi_translate_uv2p().

Direct Guest Virtual Memory Access (DGVMA):
Based on TEVAT, users can acquire a read only pointer to the virtual memory base of shm-snapshot. It provides a much faster (non-copy) manner to read guest virtual memory bypassing vmi_read_va().

I add an API in this PR:

const void * vmi_get_dgvma(vmi_instance_t vmi, pid_t pid);

Performance benchmark:
Achieve native memory read bandwidth with TEVAT and DGVMA. (3X ~ 4X speedup over legacy vmi_read_va())

Advantages:
1. MMU assist address translation, so lower CPU consumption;
2. Direct virtual memory access, more efficiency.

Overhead:
The creation of a TEVAT mapping table can cost 0.1 second on my desktop.

Limitation:
Just targeting KVM.

Signed-off-by: Guanglin Xu <mzguanglin@gmail.com>