Revert "Revert "Create driver model and refactor virtualbox dependencies...

This brings back @zeeyang 's work, but I need to adjust it to fix the bugs I found when releasing 1.1.2

I'm pretty sure its just that a few fixes were made after his refactor