Introdude new Locks API, and the Forseti lock manager

 o The classic LockManager remains, but as an implementation of
   the new Locks API. It has been slightly improved to not contend
   on global data structures when taking locks it already holds.

   The classc lock manager is now referred to as the "Community
   Lock Manager".

 o Forseti is a new lock manager, available in enterprise only, it
   is faster than the community manager, and scales linearly as more
   execution threads are added. It uses a new deadlock detection
   scheme as well, which means deadlock detection is significantly
   faster and requires no pessimistic synchronization.
Fixed lock management introspection.
Fixed incorrect shared lock holder list resizing
Includes before/after state in command #toString() methods

where applicable, namely nodes and properties
Merge pull request #2161 from tinwelint/2.0-before-after-command-tostring

Includes before/after state in command #toString() methods
Swapped last deadlock test to use new Locks API.
Try to avoid letting DeadlockIT leave deadlocks in the shared server.

o The test running after DeadlockIT (TransactionErrorIT) very rarely
  fails because there is a deadlock in the cleanup it does before it
  runs.

o These tests (and many other ITs) share a long-running server. My guess
  is that the clean-up at the end of DeadlockIT is not sufficient to get
  rid of the locks -- specifically the executor threads that the test
  use don't get killed off in time.

o This change makes the clean-up of the OtherThreadExecutor more
  rigorous to try to eliminate this corner-case.
Merge pull request #2162 from benbc/2.1-better-cleanup-for-deadlockit

Try to avoid letting DeadlockIT leave deadlocks in the shared server.
Extract test for node/relationship ids seek out of SimpleLogicalPlannerTest

o Code cleanup in idSeekPlanner
Improved guessing cardinality estimator to be somewhat consistent
Fix the selection plans for relationship by ID planning
Merge pull request #2166 from davidegrohmann/ronja-planning-cleanups

Ronja planning cleanups
Address some warnings.
Better error reporting if recursive directory deletes fail.

o Although it threw an IOException if the delete failed, we didn't get
  any information about why, because #deleteFile() itself doesn't throw
  an exception.

o We would like to get better reporting to help diagnose flaky tests.

o I am reluctant to change FileUtils#deleteFile() itself to throw an
  exception instead of returning a boolean because it is so widely used.
Add initial hash join planning support
Refactor CardinalityEstimator

Instead of having multiple methods for different kinds of entities
to estimate, make it simply take a logical plan.
In particular, that makes writing tests for planning considerably
easier by just spelling out a partial function that returns
different estimates for different plan patterns.
Use toSet in MatchTest to make the result order-independent
Remove dead code
Merge pull request #2168 from jakub-/hash-join

Add initial hash join planning support
Extract test for all nodes scan, index seek, index scan and label scan out of SimpleLogicalPlannerTest