Add equality method to TypeBounds.

Curiously, was missing before, which meant variance was ignored when hash-consing
TypeBounds.
Create TypeAlias subclass of TypeBouunds

Specialize hash consing of type aliases.
TypeAlias unapply accepts only Type Aliases
Converted some TypeBounds pattern matches to TypeAlias matches.

Replace all

     case TypeBounds(lo, hi) if lo eq hi =>

patterns with

     case TypeAlias(alias) =>
Moved derivedTypeAlias method to TypeAlias
Distinguish calls to create real type bounds from alias type bounds.

So far this affects only the calls, both methods are still the same.
But their implementation will be changed next.
Refactor & and | on TypeBounds

Generate Type aliases only when original type(s) were
aliases.

Also, TypeBounds.real never generates an alias.
Make derivedTypeBounds always create real TypeBounds.
Revert TypeBounds.real to TypeBounds.apply

TypeBounds.real served its purpose: Flushing out all problems with
creating TypeBounds.
Get rid of TypeBounds.onAlias

This was the last bit that tested for the fragile `lo eq hi` condition.
Merge pull request #270 from dotty-staging/change/type-aliases

Change/type aliases