Improve shadowed implicits detection, reporting.

Rather than using `typedIdent` to detect shadowing, do a direct
lookup in the scope with `Context#lookup`.

In the process, we simplify the manner in which the implicit tree
is created, but delegating the job to `TreeGen`, after extending
it to support creating `Ident`s with a name different to the
referenced symbol, as can happen with aliased imports.

Before this change, the reason for shadowed implicit was obscured
by the inability to typecheck the shadower.

    % scalac -Xlog-implicits neg/t7788.scala
    conf is not a valid implicit value for T[String] because:
    hasMatchingSymbol reported error: polymorphic expression cannot be instantiated to expected type;
SI-7788 Predef.conforms can circumvent implicit shadowing

Regular implicits play by the rule that they are only usable
implicitly if they could be used explicitly. This means that
they cannot be shadowed.

`Predef.conforms` is a bit special: it already has one special
rule for implicit search, in that it can't be used for implicit
views.

This commit adds a second special case: it cannot be shadowed
by another non-implicit member.
SI-7788 Refactoring in typedImplicit1

  - route checks for Predef.conforms through one method
  - handle all the failure cases of `NameLookup` at once
  - Use string interpolation
  - outsource generation of the Ident or Select tree to,
    TreeGen.

More to do in here, but I'm trying at least to leave things
no messier than when I arrived.
SI-7788 Add a clarifying comment

For a subtle point that was discussed during review.