Implement deterministic FRU scanning and synchronize with ad-hoc scans.

- Adds a `ScanAllFrusDeterministically` method to `FruCollector` to perform a full scan of all expected FRUs, populating a `FruTable` with presence and logical consistency information.
- Proto definitions are extended to include expected hardware information for deterministic BMC: new message `ExpectedHardwareInfo` to `Fru`
- A new mutex `scan_in_progress_mutex_` is introduced to `FruCollector` to  prevent concurrent ad-hoc and deterministic FRU scans. More specifically, this will avoid potential race condition on RawFruTable update, i2c bus transaction overhead(address switch), extraneous entity config reload
- `GetPartAndSerialNumberFromFields` is implemented to retrieve part number and serial pair, it will try board PN and SN first then product PN and SN if the former is not found. This is due to some FRU using board pair but otherse using product pair and UHM now doesn't distinguish them.
- `CreateAndPopulatePresentRawFru` is created with common code factored out for the RawFru contruction logic to be reused.
- The `EntityConfig::UpdateFruAndTopology` interface is updated to accept a vector of RawFru's, allowing multiple new FRUs to be processed.
- Mutable data in `EntityConfigJsonImplDataStore` is permitted to refresh without time constraints in deterministic mode as prerequisite for ondemand/periodic scan

Note we are supposed to update "immutable data" as well for ondemand FRU rescan and update sensor collector with new data. But currently with the interim implementation, only mutable data for FRU modeling in the store is refreshed. The exposed sensor which in immutable data will stay same, so sensor collector will not be reconfigured accordingly. This mean any new exposed element from newly detected FRU will not be modeled. see b/469890768#comment2 for more info and next step, the new implementation will come later in separate CL

#deterministic-bmc

PiperOrigin-RevId: 846820502
Change-Id: I72dc6518b40ba02b60e2fcbed561e643c521363d
diff --git a/gbmcweb b/gbmcweb
index ca5f17c..561beb5 160000
--- a/gbmcweb
+++ b/gbmcweb
@@ -1 +1 @@
-Subproject commit ca5f17cb360e7ab9b39648e05e73fc8b38afcbc5
+Subproject commit 561beb5d810de6c9df40c3c4557871becd59408a