type system improvements needed for constructors-via-call

- make typeintersect((Rational{T},T),(Rational{Integer},Int)) == (Rational{Integer},Int)
  This used to be Bottom, since the T's had to match exactly. Now if T
  appears in covariant position, subtypes can also match. This is a
  good change anyway, but turns out to be necessary for the new constructor
  design. We have a constructor `Rational{T}(x::T, y::T)` which now gets
  lowered to `call{T}(::Type{Rational{T}}, x::T, y::T)`, so obviously we
  must allow x and y to be any subtypes of T.
  This also allows convert_default to be replaced with
  `convert{T}(::Type{T}, x::T) = x` (to be done next).

- making that work required an improved constraint solving algorithm in
  type intersection. the new algorithm should be much more robust, but
  it yields more typevars in its answers, for example
  `typeintersect((T,AbstractArray{T}),(Any,Array{Number,1}))` gives
  `(_<:Number,Array{Number,1})`.

  Hopefully this will not cause problems. But I can imagine doing a
  post-processing step to replace `_<:T` in covariant position with
  just `T`. In the meantime, to further legitimize such results I
  also made the next change:

- make TypeVar a subtype of Type