CarClient
Safe client for the Car service.
This class keeps track of the Car service health as long as the coroutineScope is active.
As soon as the Car service becomes available, CarClient will execute all the actions specified with onConnected. After a Car service crash, onConnected actions will be executed again. Every time the service crashes, and also when CarClient is stopped, it will execute all the actions specified with onDisconnected. If the service is not available at all, for example if running under Build.VERSION_CODES.R or with a non-automotive Android version, the client will execute all the actions specified with onFailed. Additional one-time actions can be executed with postOnCar which guarantees they are either run with a valid Car service connection, or not executed at all.
Unless otherwise noted, callbacks are executed in the main thread. When the coroutineScope is destroyed, CarClient must be disposed of.
Requires at least Android Build.VERSION_CODES.R, otherwise the client will directly call the onFailed actions then stay dormant.