Moves AbstractFileClassLoader to scala-reflect.jar

Its string name was used in ReflectionUtils and became broken after repl
got factored out. This hints that that classloader belongs to where it is
used, i.e. to scala-reflect.jar.

Moreover AbstractFile is defined in scala-reflect.jar, so it's only
logical to also define a derived classloader in scala-reflect.jar.
Cleaning up isApplicable and neighbors.

I'd really like these methods to receive greater scrutiny.
To that end I'm scrutinizing them.
Cleaning crew moves down the hall.

Swabbing the decks of isAsSpecific and isApplicableSafe.
Wow isApplicableSafe, you don't really need to declare and
allocate a two-argument case class in order to manage a
second method call.
Moving on to checkBounds.

So much dust and debris, so little time.
Scrubbing up inferPolyAlternatives.

Now you can take inferPolyAlternatives home to meet your mother.
Commented out code from 2006.

Yes, 2006. Perhaps we should have a "sunset provision"
which removes commented-out code after seven years. Or even
slightly sooner.
Commented out code from 2007.

It's not exactly 2006-era code but it's still a little ripe.
Commented out code from 2008.
Annotated return type of a method.

Because nobody should have to guess a return type like
(List[Type], Array[Int], Boolean). In fact nobody should
ever experience such a return type at all.
Make cookJavaRawInfo return this.type.

A lot more useful than Unit.
Remove isPossiblyMissingArgs.

It has been hardcoded to return false for a long while anyway.
Pull some big chunks out of checkAccessible.

To streamline the essential logic.
Splashed soap and water on checkAccessible.

Yes checkAccessible, you patiently waited your turn.
Do you like your new clothes? Oh, still not clean enough?
I understand, but we must leave time for the other methods.
Now run along and check something.
Wipe some dirt off protoTypeArgs's face.

He's a good kid, even if not the most hygenic.
Tried to follow own advice with isCoercible.

Only to discover that it's really hard to move isCoercible
anywhere because it wants to call inferView which, despite its
suggestive name, is not visible in Infer. So I did what I
could and documented it a little.
Help makeFullyDefined allocate fewer ListBuffers.
Swabbing exprTypeArgs.

Oh exprTypeArgs, you will send us to the poorhouse with
your spendy ways. So many tuples have been dying needlessly.
Merge pull request #2564 from paulp/pr/infer-cleanup

sanitation of Infer.
SI-7499 Additional test case for SI-7319

From a duplicate ticket.
SI-3425 erasure crash with refinement members.

Checking that a refinement class symbol does not override
any symbols does mean it will have to be invoke reflectively;
but the converse is not true. It can override other symbols
and still have to be called reflectively, because the
overridden symbols may also be defined in refinement classes.

  scala> class Foo { type R1 <: { def x: Any } ; type R2 <: R1 { def x: Int }  }
  defined class Foo

  scala> typeOf[Foo].member(TypeName("R2")).info.member("x": TermName).overrideChain
  res1: List[$r.intp.global.Symbol] = List(method x, method x)

  scala> res1 filterNot (_.owner.isRefinementClass)
  res2: List[$r.intp.global.Symbol] = List()

And checking that "owner.info decl name == this" only works if
name is not overloaded.

So the logic is all in "isOnlyRefinementMember" now, and
let's hope that suffices for a while.