This is a large intrusive refactor but it will make it easier
to adopt other components from rust-vmm ecosystem in the future.
Our old implementation was also potentially problematic due to
an API which directly hands out [u8] slices to guest memory.
(See VolatileSlice and 'volatile_memory' module in vm-memory for
discussion about this issue)
Since the old memory manager also handled graphics memory buffers
this was rewritten into a separate component and moved into 'io'
module.
Uses of FileDesc class were removed and replaced by use of the
standard File type instead which accomplishes most of the same
goals.
MemoryFd was removed and replaced with memfd crate.
Many many changes. The major themes of the refactor were to move the
x86 specific code into a separate 'arch' package and make the main
initialization and run loop much simpler to understand. The second big
change was to improve how errors are handled by making them more 'local'
so that packages define their own errors most of the time.