Add a TriState value class.

Sometimes true and false aren't enough.
New method typeRelationPreCheck.

Utilizes TriState from previous commit. Consolidates code
which had been duplicated across isSubType and isSameType.
Eliminated the shared logic.

Gave isSubType and isSameType a more closely parallel
structure to reduce both current and future duplication.
SI-7520 bug in subtyping.

isSubType, if given two SingleTypes, would check =:= and
stop there. It is necessary to continue with weakening the left
hand side, because (for instance) the singleton type on the
left hand side could be a refinement class carrying parents
which are themselves single or constant types.
Merge pull request #2597 from paulp/issue/7520

SI-7520 bug in subtyping.