Use internal heirarchy for types

Replaces the scala-based heirarchy and introduces static vals for
all types, prefixed by CT (Cypher Type)

Reverses the directionality of the heirarchy: now treats Any as
the super type ("up" in the heirarchy). This aligns with the
definition in most other languages.

Renames iteratedType on AnyType to legacyIteratedType
(uses innerType on CollectionType)
Replace TypeSet with Type Specifications

These are capable of representing infinite sets of types,
provide better clarity and simplicity in the type checking,
and resolves a number of inconsistencies that could occur.
Add coercion of Cypher Types
Correct type checking of functions