Introduce ExecutionStreamAssignment.
Introduce ExecutionStreamAssignment.

`ExecutionStreamAssignments` represent a mapping from `HloInstructions` to `ExecutionStreamIds`. Asynchronous calls (`async-start`, `async-update`, and `async-done`) result in the target computations being assigned new `ExecutionStreamIds` to support concurrent execution.

Reverts c031655ca9514e7946bb87eda17cf5932c381a8b
