Option 1
Whenever you reload the page, your app has to reload as well. It may happen fast, as the browser caches your code and other static elements, but what is the point? GWT is used as an "app": it resides within a single host page, and changes its state based on user instructions.
Window.Location.assign(url)
is only used when a user is leaving your application: either because this user logged out, or because he is not logged in yet, and you redirect him to a login page.
Option 2
Usually, this option is used when you provide a link to a different application/website, and you want to keep your app running.
Option 3
In this option you do not "redirect" "pages". You show different "views" to a user. The web page (host page) remains the same at all times. This is how GWT is supposed to work.