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
Remove CTLong

CTInteger is used consistently internally
Use covariant/invariant/contravariant specifiers instead of TypeSpec operators
Merge pull request #1786 from cleishm/cypher-types

Corrections and improvements to Cypher type system