asyncio: sync with Tulip

- CoroWrapper.__del__() now reuses repr(CoroWrapper) to log the "... was never
  yielded from" warning
- Improve CoroWrapper: copy also the qualified name on Python 3.4, not only on
  Python 3.5+
diff --git a/Lib/asyncio/coroutines.py b/Lib/asyncio/coroutines.py
index 4cbfa85..c28de95 100644
--- a/Lib/asyncio/coroutines.py
+++ b/Lib/asyncio/coroutines.py
@@ -29,8 +29,6 @@
 _DEBUG = (not sys.flags.ignore_environment
           and bool(os.environ.get('PYTHONASYNCIODEBUG')))
 
-_PY35 = (sys.version_info >= (3, 5))
-
 
 # Check for CPython issue #21209
 def has_yield_from_bug():
@@ -119,8 +117,7 @@
         gen = getattr(self, 'gen', None)
         frame = getattr(gen, 'gi_frame', None)
         if frame is not None and frame.f_lasti == -1:
-            func = events._format_callback(self.func, ())
-            msg = 'Coroutine %s was never yielded from' % func
+            msg = '%r was never yielded from' % self
             tb = getattr(self, '_source_traceback', ())
             if tb:
                 tb = ''.join(traceback.format_list(tb))
@@ -155,7 +152,7 @@
             if w._source_traceback:
                 del w._source_traceback[-1]
             w.__name__ = func.__name__
-            if _PY35:
+            if hasattr(func, '__qualname__'):
                 w.__qualname__ = func.__qualname__
             w.__doc__ = func.__doc__
             return w
@@ -178,10 +175,7 @@
 
 def _format_coroutine(coro):
     assert iscoroutine(coro)
-    if _PY35:
-        coro_name = coro.__qualname__
-    else:
-        coro_name = coro.__name__
+    coro_name = getattr(coro, '__qualname__', coro.__name__)
 
     filename = coro.gi_code.co_filename
     if (isinstance(coro, CoroWrapper)