Optimize isSelfSuperCall

Avoid the Applied extractor altogether, as that eagerly
creates `argss` which we don't need and which is quite
expensive.
Optimize TreeInfo#isMacroApplication.

It's called rather frequently. Tree#symbol is a megamorphic call,
which featured in profiles.
Typers#stabilize is a noop in erasure's typer.

Anything we can do to make erasure faster.
Optimize typedDefDef: disable some checks post typer

isPossibleRefinement reported as 1% of my profile, about half of that
was reported from the `EraserTyper`.

This commit restricts `checkMethodStructuralCompatible` to
the typer phase, and also moves in the feature warning for
implicits which was nearby.

I've also made a minor optimization to `overriddenSymbol` by
avoiding computing the method schema repeatedly.
Optimization in InstantiateDependentMap

Avoid creating a throwaway array in existentialsNeeded.
Implicits: Move shadowing checks after plausibility checks

Shadowing is rarer than implausbility; this seems to be
the most efficient way to order these filters.
More overrides for SetN
Optimize lookup of tree/symbol attachment search.

Use `hasAttachment` rather than `getAttachment.exists`
Optimize use of methodTypeSchema

Cache it, rather than recreating it for each candidate overriden
method we encounter.

We can't do this eagerly as we trip a cycle in neg/t5093.scala.
Merge pull request #3445 from retronym/topic/opt7

Grab bag of compiler optimizations