rustc: catch non-trait methods before typeck.

Closes #3973.
Previously it would error after resolve on this line due to using a typedef for a trait. I've changed to a note `//~^ NOTE: type aliases cannot be used for traits` but the span is on the impl. 

If I drop the additional note and leave just a 'x is not a trait' then a user might still be confused, so it helps. 

The 'x is not a trait' error was moved to resolve, as otherwise the user would encounter the 'method is not a member of trait' error, which, if they've mixed up the syntax, will be difficult for them to figure out what's wrong. (If they have `impl type for trait`)

I believe the span could be improved, but I don't feel it's a blocker as the note should give enough information to correct (and is an improvement over the old error message).

But on those lines, the 'reference to trait' error should still popup if there's a typedef for a trait which isn't used in an impl, I can add a new test for that case, as the initial reason for testing that is that it used to ICE (according to the issue).