asyncio: Set __qualname__ attribute of CoroWrapper in @coroutine decorator on
Python 3.5

- Drop __slots__ optimization of CoroWrapper to be able to set the __qualname__
  attribute.
- Add tests on __name__, __qualname__ and __module__ of a coroutine function
  and coroutine object.
- Fix test_tasks when run in debug mode (PYTHONASYNCIODEBUG env var set) on
  Python 3.3 or 3.4
diff --git a/Lib/asyncio/tasks.py b/Lib/asyncio/tasks.py
index 281bf60..eaf93f8 100644
--- a/Lib/asyncio/tasks.py
+++ b/Lib/asyncio/tasks.py
@@ -32,12 +32,12 @@
 _DEBUG = (not sys.flags.ignore_environment
           and bool(os.environ.get('PYTHONASYNCIODEBUG')))
 
+_PY35 = (sys.version_info >= (3, 5))
+
 
 class CoroWrapper:
     # Wrapper for coroutine in _DEBUG mode.
 
-    __slots__ = ['gen', 'func', '__name__', '__doc__', '__weakref__']
-
     def __init__(self, gen, func):
         assert inspect.isgenerator(gen), gen
         self.gen = gen
@@ -111,8 +111,10 @@
         @functools.wraps(func)
         def wrapper(*args, **kwds):
             w = CoroWrapper(coro(*args, **kwds), func)
-            w.__name__ = coro.__name__
-            w.__doc__ = coro.__doc__
+            w.__name__ = func.__name__
+            if _PY35:
+                w.__qualname__ = func.__qualname__
+            w.__doc__ = func.__doc__
             return w
 
     wrapper._is_coroutine = True  # For iscoroutinefunction().