MappedBlockStream can work with any sequence of block data where the ordering is specified by a list of block numbers. This is true even in the case of split FPMs. So here we add support for creating a MappedBlockStream representing the Fpm so we can just read it in one single operation. This is also nice because we have to read/write the Fpm from multiple places, so this allows us to centralize all the logic to make sure we aren't reproducing the split interval logic in many locations.
For some reason, this also seems to fix a bug. I no longer show any orphaned pages on larger PDBs.