Plugin EP: Fix bug that incorrectly assigned duplicate MetDef IDs to fused nodes in different GraphViews (#27666)
### Description
Fixes a bug where `PluginExecutionProvider::GetCapability()` incorrectly
assigned duplicate MetaDef IDs to fused nodes that live in different
GraphViewer instances (e.g., the then/else branches of an If node).
The root cause was that `GetCapability()` created a new
`ModelMetadefIdGenerator` on every invocation. Since the graph
partitioner calls `GetCapability()` once per subgraph, the generator's
monotonic counter reset each time, producing colliding IDs across
subgraphs. This caused session creation to fail with:
> Failed to add kernel for example_ep_9433721956998717990_0 example_ep
example_ep: Conflicting with a registered kernel with op versions. the
since version is: 1
#### Fix
- Promoted `ModelMetadefIdGenerator` to an instance member of
`PluginExecutionProvider` so the same generator is reused across all
`GetCapability()` calls, ensuring unique MetaDef IDs.
- This is also consistent with how existing provider-bridge EPs create
and use a single generator instance.
- **Bonus perf improvement**: No longer recomputes the entire model's
hash on every call to `GetCapability()`.
#### Testing
Example EP changes:
- Refactored `SaveConstantInitializers()` →
`TrySaveConstantInitializer()` to save initializers per-node-input
instead of via `graph.GetInitializers()`, which doesn't return
initializers defined in parent or sibling subgraphs.
- Extracted `CopiesConstantInitializers()` helper to deduplicate the
condition for drop_constant_initializers.
Unit testing:
- Added unit test called
`CompilingPluginEp_MultiSubgraphs_DuplicateMetaDefIdBug` — runs an If
model with Mul nodes in both branches, verifying that both fused nodes
receive unique MetaDef IDs and the session creates/runs successfully.
Credit to @apwojcik for [finding the
bug.](https://github.com/microsoft/onnxruntime/pull/27608)