Explain the internal working of Coroutines in Android. How does suspension work without blocking threads?