What is the difference between a Coroutine and a Thread in Kotlin, and how do you manage dispatchers in Peloton interactive’s Android codebase?