[App Shells] App shells in runtime prefetches (#93801)
Reimplements app shells in runtime prefetches in terms of a staged
render.
when `appShells` is on:
- a `next-router-prefetch: 2` request (i.e. "including link data") will
have a shell stage that only includes session data. we communicate the
byte offset to the client so it can rewind the response to a session
fallback
- a `next-router-prefetch: 3` request (i.e. "session shell") stops
rendering after the shell stages, i.e. link data is never resolved. this
replaces the previous `forceOmitParams` implementation.
Note that In order to produce a session shell, we have to resolve static
`params` and rootParams in the Runtime stage (previously, they'd resolve
in the static stage). This is because params are link data and cannot be
part of the session shell. We don't really need to rewind a runtime
prefetch to a static stage, so this divergence in behavior shouldn't be
meaningfully observable.
Notable call-out: root params getters can also be called inside caches.
if a cache accesses root params, then the cache depends on link data and
must be excluded from the shell. We rely on existing mechanisms for
tracking root param access and delay the cache appropriately in the
final render.