Introduce generic memory access functions

This is version # 2 of introducing generic memory access functions via an extendable structure, access_context_t. Currently LibVMI supports read/write accesses via 3 distinct mechanism: physical addresses, virtual addresses via PID and kernel virtual addresses via symbols. As there is need of adding a new set of functions where the DTB can be directly supplied for virtual address translation, this PR consolidates the code-base to support this feature with the minimal amount of code-duplication.
Re: forgotten break statements - - recommend use of -Wimplicit-fallthrough with
clang, which will be noisy about it. Certainly we have intentional
fall-through on occasion -- we should probably stick a comment in each case
to reassure future versions of ourselves.