Enrich the API of Type.

Added

    public boolean isUnsupported()
    public boolean isAssignableTo(final Type type)
    public boolean isEqualComparableTo(final Type type)
    public boolean isRelationalComparableTo(final Type type)
    public boolean isAddableTo(final Type type)
    public boolean isSubtractableFrom(final Type type)
    public boolean isMultipliableWith(final Type type)
    public boolean isDisjunctableWith(final Type type)
    public boolean isConjunctableWith(final Type type)

It make type-checking code more readable and facilitates unit testing.
Also cut down on the number of error message types, we only need two
types for the invalid operand(s) errors.