[Segment Cache] Implement hash-only navigations (#76179)
When a navigation happens and the only thing that changes is the hash
fragment, we must do some special handling to ensure that the hash is
correctly scrolled into view.
Nearly all of this is handled by ScrollAndFocusHandler; for the Segment
Cache, the only thing we need to do is update a few of the fields on the
router state object, like `scrollableSegments` and `onlyHashChange`.