Improve async detection mechanism with blacklist
Improve async detection mechanism with blacklist

Because the async repl works by wrapping any code that raises
SyntaxError in an async function and trying to execute it again, cell
bodies that are invalid at the top level but valid in functions and
methods (e.g. return and yield statements) currently allow executing
invalid code.

This patch blacklists return and yield statements outside of a function
or method to restore the proper SyntaxError behavior.

ipython/ipython,ipython/ipython