Convenience method findSymbol.
Add -Xdev to the runtime-visible settings.
Mappings between classes and pickler tags.

This enables a measure of "command/query separation", which is
to say: the same method shouldn't go on a side effecting binge
and also return a value.
Tree traversal: more uniform and granular.

There's a huge amount of tree traversal related duplication
which is hard to eliminate only because trees aren't properly
traversed. The not-quite-tree bits of key trees are ignored
during traversals, making it impossible to write e.g. a
pretty printer without duplicating almost the entire traversal
logic (as indeed is done for printing purposes in more than one
place.) And almost the entire pickler logic is redundant with
Traverser, except since it's all duplicated of course it diverged.
The pickler issue is remedied in the commit to follow.

The not-quite-trees not quite being traversed were Modifiers, Name,
ImportSelector, and Constant. Now every case field of every tree is
traversed, with classes which aren't trees traversed via the following
methods, default implementations as shown:

  def traverseName(name: Name): Unit                    = ()
  def traverseConstant(c: Constant): Unit               = ()
  def traverseImportSelector(sel: ImportSelector): Unit = ()
  def traverseModifiers(mods: Modifiers): Unit          = traverseAnnotations(mods.annotations)
Eliminate redundant pickling code.

This commit drops about 700 lines of redundant traversal logic.

There had been ad hoc adjustments to the pickling scheme here and
there, probably in pursuit of tiny performance improvements.
For instance, a Block was pickled expr/stats instead of stats/expr,
a TypeDef was pickled rhs/tparams instead of tparams/rhs.
The benefits derived are invisible compared to the cost of having
several hundred lines of tree traversal code duplicated in half a
dozen or more places.

After making Traverser consistent/complete, it was a straightforward
matter to use it for pickling. It is ALSO now possible to write a
vastly cleaner tree printer than the ones presently in trunk, but I
leave this as an exercise for Dear Reviewer.
Merge pull request #3033 from paulp/pr/pickler-redux

Traverser and Pickler improvements.
SI-7688 Fix AsSeenFrom of ThisType from TypeVar prefix

Restores behaviour for the AsSeenFrom before the refactoring
in b457b6c477.

This commit uniformly considered that a `TypeVar` prefix should not
`matchesPrefixAndClass`; a condition that formerly was only applied
if the type being viewed was a `TypeRef`. This condition was
originally added in cc9e8eda3364d as a backstop for pos/t2797.scala.

This commit leaves that backstop in place where it was, although it
expresses it more directly by checking if `pre baseType clazz` is
`NoType`, which was the case that cropped up in SI-2797:

    scala> type T = bc._1.type forSome { val bc: (AnyRef, AnyRef) }
    warning: there were 1 feature warning(s); re-run with -feature for details
    defined type alias T

    scala> val et = typeOf[T].dealias.asInstanceOf[ExistentialType]
    et: $r.intp.global.ExistentialType = bc._1.type forSome { val bc: (AnyRef, AnyRef) }

    scala> et.withTypeVars( { x =>
         |   println(x.prefix.typeSymbol)
         |   println(x.prefix.typeSymbol.isSubClass(typeOf[Tuple2[_, _]].typeSymbol))
         |   println(x.prefix.baseType(typeOf[Tuple2[_, _]].typeSymbol))
         |   true
         | } , reflect.internal.Depth(0))
    type bc.type
    true
    <notype>
    res98: Boolean = true
Merge pull request #3045 from retronym/ticket/7688-4

 Fix AsSeenFrom of ThisType from TypeVar prefix