RE: What is the main difference between driver.get(baseurl) and driver.navigate().to(baseurl)?
Basically the Driver.Navigate returns a Navigation object. This object is implements an Interface called RemoteNavigation. RemoteNavigation has exposed methods to navigate, go back, go forward and refresh the page.
On the other hand Navigation is so essential to the WebDriver object that it is also implemented as a WebDriver.Get() call also. Basically they both do the same thing, however Webdriver.Get() makes DriverCommand.GET call on Browser directly and in case of Driver.Navigate.to() makes the same DriverCommand.GET call using the RemoteNavigation command.
Its just a design difference, you can consider both as a synonym of each other.