Throw better exception when cypher fails to create constraint.

Change ExecutionEngine method signatures to explicitly
  throw CypherException instead of SyntaxException.
Avoid throwing KernelExceptions from public APIs.
Add new SchemaModificationException as supertype for several related exceptions.
Try to match Cypher syntax in exception messages.

Restructure kernel exceptions to express constraint violation semantics.
Rename DataIntegrityKernelException to SchemaKernelException.
Break out subclasses of SchemaKernelException into files in their own package.
Move all KernelException classes into dedicated exceptions package.

Introduce userMessage responsibility to KernelException.
KeyNameLookup is safe subset of KeyReadOperations suitable for preparing user messages.