Execute the callback asynchronously.

        If the callback is not a coroutine, convert it.

        Note: The WebClient passed into the callback is running in "async" mode.
        This means all responses will be futures.

def _execute_callback_async(self, callback, data):
        """Execute the callback asynchronously.

        If the callback is not a coroutine, convert it.

        Note: The WebClient passed into the callback is running in "async" mode.
        This means all responses will be futures.
        """
        if asyncio.iscoroutine(callback):
            asyncio.ensure_future(
                callback(rtm_client=self, web_client=self._web_client, data=data)
            )
        else:
            asyncio.ensure_future(
                asyncio.coroutine(callback)(
                    rtm_client=self, web_client=self._web_client, data=data
                )
            )