Remove unnecessary re render on link reveal (#74670)
The Link component initiates a prefetch whenever it enters the viewport,
but currently the implementation works by setting an `isVisible` state
to true, rerendering the component, and calling `router.prefetch` inside
a `useEffect` hook. This extra render is not necessary — we can initiate
the prefetch directly inside the IntersectionObserver's event handler.
The bulk of the changes in this commit involve removing the use of the
`useIntersection` abstraction and inlining the IntersectionObserver into
the Link module. The removal of this indirection will make it easier to
add more sophisticated scheduling improvements, like canceling the
prefetch on viewport exit, and increasing the priority of the prefetch
during hover.