Driver Manager "refactoring"

This PR refactors the `DriverManager` class by deleting it and putting its responsibilities into many classes.