Ensure serialization is usable from K/N background thread

* fix concurrency issue when accessing C2TC

This bytearray was mutating itself during the init phase. By moving it to an object, the init {} deals with the initialization and makes it thread safe. The same logic was used for ESCAPE_2_CHAR.

* Serialization meets K/N background threads

    * Run all tests from both main and bg threads
    * Update Gradle distribution from bin to all
    * Update JsonReader, get rid of companions and late-initialization to make it K/N friendly and produce less code
    * Update tests to be bg-friendly

Co-authored-by: Mohamed Zenadi <mohamed@zenadi.com>
diff --git a/build.gradle b/build.gradle
index 83346e9..9d94ad8 100644
--- a/build.gradle
+++ b/build.gradle
@@ -91,6 +91,7 @@
 
 // To make it visible for compiler-version.gradle
 ext.compilerVersion = org.jetbrains.kotlin.config.KotlinCompilerVersion.VERSION
+ext.nativeDebugBuild = org.jetbrains.kotlin.gradle.plugin.mpp.NativeBuildType.DEBUG
 apply plugin: 'binary-compatibility-validator'
 
 apiValidation {
@@ -184,4 +185,4 @@
             }
         }
     }
-}
\ No newline at end of file
+}