Update Tasks to support Play Services 16.

This changed the task result to @Nullable, so some additional casting is
required to compile.

The T in Task<T> is not currectly annotated, but it should really be
matching the nullability of the result.
diff --git a/integration/kotlinx-coroutines-play-services/build.gradle b/integration/kotlinx-coroutines-play-services/build.gradle
index 51cce3f..61201fa 100644
--- a/integration/kotlinx-coroutines-play-services/build.gradle
+++ b/integration/kotlinx-coroutines-play-services/build.gradle
@@ -7,7 +7,7 @@
  * Copyright 2016-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
  */
 
-ext.tasks_version = '15.0.1'
+ext.tasks_version = '16.0.1'
 
 def attr = Attribute.of("artifactType", String.class)
 configurations {
diff --git a/integration/kotlinx-coroutines-play-services/src/Tasks.kt b/integration/kotlinx-coroutines-play-services/src/Tasks.kt
index 14fd961..4952daa 100644
--- a/integration/kotlinx-coroutines-play-services/src/Tasks.kt
+++ b/integration/kotlinx-coroutines-play-services/src/Tasks.kt
@@ -50,7 +50,8 @@
     if (isComplete) {
         val e = exception
         return if (e == null) {
-            CompletableDeferred<T>().apply { if (isCanceled) cancel() else complete(result) }
+            @Suppress("UNCHECKED_CAST")
+            CompletableDeferred<T>().apply { if (isCanceled) cancel() else complete(result as T) }
         } else {
             CompletableDeferred<T>().apply { completeExceptionally(e) }
         }
@@ -60,7 +61,8 @@
     addOnCompleteListener {
         val e = it.exception
         if (e == null) {
-            if (isCanceled) result.cancel() else result.complete(it.result)
+            @Suppress("UNCHECKED_CAST")
+            if (isCanceled) result.cancel() else result.complete(it.result as T)
         } else {
             result.completeExceptionally(e)
         }
@@ -83,7 +85,8 @@
             if (isCanceled) {
                 throw CancellationException("Task $this was cancelled normally.")
             } else {
-                result
+                @Suppress("UNCHECKED_CAST")
+                result as T
             }
         } else {
             throw e
@@ -94,7 +97,8 @@
         addOnCompleteListener {
             val e = exception
             if (e == null) {
-                if (isCanceled) cont.cancel() else cont.resume(result)
+                @Suppress("UNCHECKED_CAST")
+                if (isCanceled) cont.cancel() else cont.resume(result as T)
             } else {
                 cont.resumeWithException(e)
             }
diff --git a/integration/kotlinx-coroutines-play-services/test/TaskTest.kt b/integration/kotlinx-coroutines-play-services/test/TaskTest.kt
index 15c302b..b87a295 100644
--- a/integration/kotlinx-coroutines-play-services/test/TaskTest.kt
+++ b/integration/kotlinx-coroutines-play-services/test/TaskTest.kt
@@ -93,6 +93,11 @@
     }
 
     @Test
+    fun testNullResultTaskAsDeferred() = runTest {
+        assertNull(Tasks.forResult(null).asDeferred().await())
+    }
+
+    @Test
     fun testCancelledTaskAsDeferred() = runTest {
         val deferred = Tasks.forCanceled<Int>().asDeferred()