Add merge functionality to core API

This contains work from TL, CV, BBC.

Details:

o Core API
  o Add new Merger and MergeResult interfaces to core API
  o Add GDS#getOrCreate(label1, label2, ...).withProperty(k, v).merge()
  o Add UniqueFactory#asMerger()
  o Update javaocs and documentation examples for creating unique nodes

o Change locking of nodeGetUniqueFromIndexLookup
  o New contract: RLock held afterwards if node was found, WLock otherwise
  o Introduce ReleasableLock as a means of either manually releasing locks or registering them with the transaction

o Loosely related fixes
  o Fix InMemLabelScanStore to handle queries for labels that haven't been used before
  o Fix InMemoryIndex to not apply updates idempotently in online mode
  o Fix BitmapFormatTest.shouldBeAbleToCheckIfASingleNodeIdIsSet
  o Make KernelTransaction.assertOpen() public
  o Make Statement.assertOpen() public
  o Make NotInTxException extend IllegalStateException instead of being a plain RuntimeException