The cached fast path serialised its per-room lookups
(is_partial_state_room, then the hierarchy state cache fill, then room
version and stats), which undid the traversal-level prefetch parallelism
on a cold cache under latency. Gather them concurrently instead, warming
the room-stats and room-version caches that the rest of the path reads.
Since the partial-state check now races the cache fill, drop the cached
hierarchy state again when the room turns out to be partial-stated, and
register get_room_hierarchy_state in _invalidate_state_caches(_all) so
state resets and un-partial-stating invalidate it too.