Refactor access to drivers from controllers

Also refactors transport controllers to have a reference back to
the driver, to match the functionality in other layers