Create a util function `BuildGetTupleElementsForTupleResults` with proper processing on the shardings.
Create a util function `BuildGetTupleElementsForTupleResults` with proper processing on the shardings.

**Issue 1.**
The following code snippet is widely used in `mlir_hlo_to_hlo.cc` when exporting to a XlaOp if the op has multiple results, such as RngBitGeneratorOp and OptimizationBarrierOp. We create a util function to replace the repeating code snippets.
```
for (auto [index, result] : llvm::enumerate(op.getResults())) {
    value_map[result] = xla::GetTupleElement(tuple, index);
}
```

**Issue 2.**
When we build `xla::GetTupleElement` in the code snippet, we inherit the tuple sharding (if any) and assign the tuple sharding to the `xla::GetTupleElement`. This triggers a mismatching error on shape and sharding in XlaBuilder. This cl uses `XlaScopedShardingAssignment` to process it appropriately.

Enhance the test cases accordingly.
