Major rework of the driver interface codebase

The goal of this PR is to avoid building driver code which is explicitly disabled at configure time. This enables us to forgo the if-elseif wrappers and defining empty functions for each driver as the code will simply not be built when not in use. As part of this work I moved all driver files into driver-specific folders as to reduce the clutter.

The PR also gets rid of the legacy static driver interface definition and integrates it into vmi_instance.

The abstracted driver functions which perform safety checks to see if the given function is defined for the driver in use are converted into static inlines.

The driver initialization has been split into two: driver_init which is only responsible for base driver setup, and driver_init_vmi which is responsible for setting up file/domain specific values.
Moving the definitions for the snapshot structs after `kvm_instance_t` improves readability, but having the end of the struct inside the `#if` and huge `#else` decreases it more.  This is not compiling either, since v2m_table_t has not been forward declared.

I think a good compromise would be to include the forward declaration and leave the definitions below.