title: How does Kotlin's Json.decodeFromString work without a first DeserializationStrategy argument?
body: <p>I'm very new to Kotlin and am curious what magic allows this code to work:</p>
  <p>From <a href="https://github.com/Kotlin/kotlinx.serialization/blob/e2e764a132c8eebd31208120774baf9a71ec23c7/formats/json/commonTest/src/kotlinx/serialization/SerializerForNullableTypeTest.kt" rel="noreferrer">https://github.com/Kotlin/kotlinx.serialization/blob/e2e764a132c8eebd31208120774baf9a71ec23c7/formats/json/commonTest/src/kotlinx/serialization/SerializerForNullableTypeTest.kt</a></p>
  <pre><code>@Serializable
  data class Box(val s: StringHolder?)
  
  val deserialized = Json.decodeFromString&lt;Box&gt;(string)
  </code></pre>
  <p>When the function definition seems to require an initial argument before the encoded JSON string.</p>
  <p><a href="https://github.com/Kotlin/kotlinx.serialization/blob/e2e764a132c8eebd31208120774baf9a71ec23c7/formats/json/commonMain/src/kotlinx/serialization/json/Json.kt" rel="noreferrer">https://github.com/Kotlin/kotlinx.serialization/blob/e2e764a132c8eebd31208120774baf9a71ec23c7/formats/json/commonMain/src/kotlinx/serialization/json/Json.kt</a></p>
  <pre><code>public final override fun &lt;T&gt; decodeFromString(deserializer: DeserializationStrategy&lt;T&gt;, string: String): T {
  </code></pre>