Fixes a race condition between index population and incoming updates

where the index could end up having duplicates (or more) for any given
entry.

Solution is to change (and clearly document) the contract of the
IndexPopulator#update method in that all updates must be applied in an
idempotent manner. This will incur an overhead in the index population,
but it's a background process and updates comes in in batches so the
overhead is somewhat minimized. Data coming in via IndexPopulator#add does
not have to be checked for idempotency and that fact was clarified a bit
in the javadocs as well.
Better handling of lucene corruption.

 o Label scan store now halts database start if lucene is corrupt, with an exception explaining how to resolve the issue.
 o Lucene provider for new indexing now marks corrupt indexes as failed, such that the user manually must drop the index and re-create it.
Move a functional test from its own folder to src/test.
Merge pull request #1175 from tinwelint/2.0-index-popupation-deduping

Fixes a race condition between index population and incoming updates
Merge pull request #1174 from cleishm/labels_type_fix

Correct result type of labels() function
Merge pull request #1165 from jakewins/dont-start-on-corrupt-idx

Better handling of lucene corruption.
Merge pull request #1180 from benbc/2.0-move-integration-test

Move a functional test from its own folder to src/test.
Descriptions for public packages.
Remove support for bare nodes with labels in patterns

When using labels in patterns, parenthesis must be used.
ie. CREATE (n:Foo:Bar)