Optimization/logic improvement in Scopes.

I rescued "isSubScope" from the innards of isSameType
and placed it on Scope.

To write a more efficient "isSameScope", I needed a size
method which wasn't O(n). I now cache the size whenever the
elemsCache is regenerated.
Centrally unify module class representations.

There are these two representations of a type we wish to
treat as the same:

  TypeRef(pre, sym1, Nil) // sym1.isModuleClass, sym1.sourceModule == sym2
  SingleType(pre, sym2)   // sym2.isModule, sym2.moduleClass == sym1

I rolled the recognition of this into normalizePlus where it
won't bother anyone. normalizePlus is the last effort undertaken
by isSameType before it gives up. This allowed significant
simplification of logic elsewhere, since there is a great
deal of logic working around the fact that a TypeRef might
be equivalent to a SingleType even after dealiasing.
Transcendent rewrite of isSameType.

A highly satisfying rewrite of isSameType. It's faster, clearer,
shorter, better commented, and closer to correct. I am especially
pleased that t5580b stopped compiling, given that nobody seemed to
have much idea why it compiled in the first place.
Merge pull request #2356 from paulp/pr/isSameType

Wonderfulizing isSameType