Avoid cuDNN initialization in Stream::DeallocateStream
Avoid cuDNN initialization in Stream::DeallocateStream

`DeallocateStream` used to call `AsDnn()` which initializes
cuDNN if it wasn't initialized before.

This is not intended in `DeallocateStream` which runs as part
of the destructor.

Instead I access the `dnn_` member variable directly.
Only if cuDNN was initialized previously we do the cleanup.

This was easy to do thanks to Kyle's cleanup from cl/623542918.

This avoid some stack overflow issues seen in
`//third_party/tensorflow/python/distribute:cross_device_ops_test_gpu`
due to excessive cuDNN initialization (even though cuDNN is not needed at all in this test).

Here is a run of this test that demonstrates the fix: http://sponge2/5c72bcc3-380f-4be3-a1f7-6c63d94848af
