librustc: Schedule cleanups properly when coercing to a &Trait.
auto merge of #15226 : luqmana/rust/abol, r=pcwalton

This was causing a ton of leaks in macro expansion.
working on hygiene
make fold_attribute part of Folder trait
replaced ignore-pretty with no-pretty-expanded

Per @acrichto's suggestion, use the more narrowly focused exclusion.
get rid of needless wrapper function
WIP match hygiene, compiles
cleanup and shiny new more-functional interface
remove unnecessary abstraction
improve match test case to include guard
hygiene for match-bound vars now implemented

Closes #9384
remove trailing whitespace
make tests hygienic...

... and possibly totally pointless. Specifically, fixing
these to make their macros hygienic may mean that they no
longer test the thing that they were supposed to test.
undo helpful attempt to spell-check

Yes, that word is spelled \'memoization\'
added unit and standalone test for 15221, extra debugging output
removed incomplete comment

as written, I don't believe this comment was helpful; I think it's
better just to steer the reader toward a general understanding of
hygiene.
simplified test case
looks like a cut-n-paste error in unused code
adjust fold to fold over interpolated items/exprs/etc.

Closes #15221
comments only