Issue #21695: Catch AttributeError created when user closes grep output window
while still being written to. With no console, this closed Idle.
Also add missing import and a few other changes.
Issue #21700: Fix asyncio doc, add DatagramProtocol
Issue #21326: Add a new is_closed() method to asyncio.BaseEventLoop

Add BaseEventLoop._closed attribute and use it to check if the event loop was
closed or not, instead of checking different attributes in each subclass of
BaseEventLoop.

run_forever() and run_until_complete() methods now raise a RuntimeError('Event loop is
closed') exception if the event loop was closed.

BaseProactorEventLoop.close() now also cancels "accept futures".
Issue #21596: asyncio.wait(): mention that the sequence of futures must not
be empty.