How do Kotlin coroutines manage thread dispatching, and how do you handle exceptions within a structured concurrency scope?