Disentangling SelectionProto and RefinedType

There were too many problems caused by it, and too little gained. So, now SelectionProto is no longer a Subtype of RefinedType.
Avoid using TypeBounds in alias refinements.

The idea is to use the alias itself. This cuts down on # of typebounds created and makes operations on refined infos and applied types more direct.
Performance improvement: inline hasAltWith

Gives us ~1%, it seems.
Performance improvement in LRUCache

Use eq for key comparisons in LRUCache.
Drop unique hashing for superId bitsets

Reason: (1) There are few sets: When compiling doty itself, 1.2K sets total, hashed to 500 uniques. (2) Bitset comparison is expensive because it relies on a double inclusion test. (This should be fixed in the Scala stdlib).
Performance improvement: Replace == with equals in util.HashTable
Reverted: Avoid using TypeBounds in alias refinements.

The idea is to use the alias itself. This cuts down on # of typebounds created and makes operations on refined infos and applied types more direct. (reverted from commit 81f31f9b71bc4466d3f04f5ce28ef94051688ecd)
Bug fix: newSyntheticTypeParam did not incorporate paramFlags
Bug fix: Logic for taking variance into account for TypeBounds comparisons was broken.
Bug fix: fix of typo in secondTry
Performance tuning: Inline TypeAlias case for hot maps.
Peformance improvement: Better basetype caching

Now first checks in cache before going into special case for static classes (derivesFrom on types is not free!)
Performance improvement: Special-case implementation of underlyingIfRepeated
Caching of implicit members

Also, some streamlining in the way memberNames are computed.
Performance improvement: Cache uninstatiated typevars in constraints

Pro: Much faster to iterate through uninstantiated type variables
Con: Constraints can no longer be value classes.

Still this seems to give a net win of ~2%.