Avoids some use of synchronized map in PersistenceManager

o Instead of calling PersistenceManager#currentKernelTransaction() when
  asserting the existence of a transaction, call the (now public)
  #getCurrentTransaction())
o KernelStatement is aware of the NeoStoreTransaction it was created with
  so that PersistenceManager can be avoided.

Going forward PersistenceManager should be deleted and each
NeoStoreTransaction should be tied closer to a kernel transaction. This
will be easier when all operations go through the Kernel API.
Have SubGraphExporter export uniqueness constraint. Fixes #1758.
Merge pull request #1764 from cleishm/keyword_space

Recognise multi-word keywords with extra whitespace
Merge pull request #1780 from tinwelint/2.0-less-persistence-manager

Avoids some use of synchronized map in PersistenceManager
Merge pull request #1762 from jotomo/neo4j-1758

SubGraphExporter: export uniqueness constraint.
Use a singleton parser for testing

This massively decreases time to run the test suite
Use internal rather than scala-based heirarchy for types

Introduces static vals for 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