Improve support for 'with' statements.
The previous code didn't look at __enter__(), and assumed that
all context-managers returned their own type.
We also didn't account for targets other than simple names,
e.g. with Mgr() as (foo, bar):
Thanks to Nicolás Alvarez.
BUG: 399533
BUG: 399534
Differential Revision: https://phabricator.kde.org/D16085