ExternalData: Add relocatable state metadata
This MR adds ExternalData_STATE_ROOT.
When ExternalData_STATE_ROOT is set, ExternalData stores its hash records and build-driver stamps under that directory instead of next to the materialized file under ExternalData_BINARY_ROOT. The relative layout under ExternalData_BINARY_ROOT is preserved. When the variable is not set, the current behavior stays unchanged.
Tests run locally:
Module.ExternalDataRunCMake.ExternalData
Issue: #27689
Topic-rename: ExternalData-state-dir
Edited by Brad King