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;

En route, I had to refactor the remainder of typedImplicit.
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.

Conflicts:
	src/compiler/scala/tools/nsc/typechecker/Implicits.scala
Further refactoring in typedImplicit

Replace early returns with monadic combinators on SearchResult.