We need to abstract event-loop dependent features so we can reuse common code between asyncio and twisted clients.