Remove CypherType.isCollection
Use internal rather than scala-based heirarchy for types
Use static vals for types

Types names are prefixed with CT (Cypher Type)
Reverse directionality of Cypher Type heirarchy

Now treats Any as the super type, which is "up" the heirarchy.
This aligns with the definition in most other languages.
Correct behaviour of merging type sets
Rename iteratedType on AnyType to legacyIteratedType

And use innerType on CollectionType
Stop TypeSet inheriting from Set[CypherType]

This allows for a more specific interface without the need to implement
all the methods of Set manipulation
No coerced mergeup
Add indefinite sized type sets
Use indefinite type sets in semantic checking

Resolves multiple type related issues, steming from the incorrect
usage of mergeUp for type constraining, and the use of AnyType() to
represent all types.
Remove DiscreteTypeSet
All expressions initially have all possible types
Track specified and expected expression types separately
Fix type calculations of arithmetic functions
Adjust