Fixes profile problem for queries starting with OPTIONAL MATCH
Merge pull request #1821 from cleishm/cypher-parser-optimisation

Store the compiled top-level parse rule rather than rebuild
Merge pull request #1816 from systay/optional-profile

Fixes profile problem for queries starting with OPTIONAL MATCH
Merge pull request #1819 from cleishm/generic_case_predicate

Coerce generic case conditions to predicates
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