[Multiple Stream Groups] Add stream_id knobs to stream_executors and devices.
Hi @buptzyb Can you please resolve the conflicts? Thank you!
This is a part of the _Multiple Stream Groups_ feature. With this new feature, users are allowed to create multiple stream groups in one GPU device, and the computation graph can be distributed to different stream groups for paralleled execution to increase GPU utilization and throughput and decrease latency. This is essential for accelerating workloads containing many small-sized GPU kernels. We got 8x speedup easily on recommender online inference systems. Please refer to the 'Performance' part in our [document](https://docs.google.com/document/d/1yL3lWk_iFKqLTyekkuaiKXZ78I0lPmD5kM1fghHRs4Y/edit?usp=sharing) for detailed and more experiment results.

Full multi-stream inference implementation please see https://github.com/tensorflow/tensorflow/compare/master...buptzyb:MultipleStreamGroups.

This PR provides the stream_id interface in stream_executors and devices, but is not used so far. With the new knobs, one stream_executor will be in charge of one stream group, different from the original assumption of one GPU device.

Ask for review from @changhuilin.