This refactors the code so we have the real function object right during
collection. This avoids having to unwrap it later and lose attached information
such as "async" functions.
Fix#3747
This will now issue a RemovedInPytest4Warning when the user calls
a fixture function directly, instead of requesting it from test
functions as is expected
Fix#3661
This was partially automated with https://github.com/asottile/yesqa
_with a few caveats_:
- it was run under python2 (chosen arbitrarily, when run under python3 other
things were changed)
- I used `git checkout -p` to revert the removal of `noqa` comments from
`cmp()` lines.