Fix GatherND zero-dimension index validation bug (#28006)
### Description
<!-- Describe your changes. -->
Replace `int64_t err_index = 0` sentinel in PrepareForCompute with
`std::atomic<const Tind*> invalid_index{nullptr}`. The old sentinel
failed to detect out-of-bounds index 0 when a dimension has size 0,
since the final check `err_index == 0` treated it as success.
This also fixes a pre-existing data race where multiple threads in
TryParallelFor could write to err_index without synchronization.
Add GatherND_zero_dim_error regression test.
### Motivation and Context
<!-- - Why is this change required? What problem does it solve?
- If it fixes an open issue, please link to the issue here. -->
Fix GatherND index validation issue.