NavigationState improvements

Refactor navigation state, hide mutability, consolidate code path so we
always output a NavigationState, but that has an isNavigating method on
it.