Fix rare race condition in Forseti lock manager

When doing a release-all on a forseti lock client which held one or more
upgraded exclusive locks (eg it originally held a shared lock and then
upgraded it), if another thread acquired a shared lock right when the client
was releasing its exclusive lock, the client could end up in a bad state.

This resolves this race by discarding references to local shared locks if they
have been upgrade when we do a release-all on every lock the client holds.
Merge pull request #2681 from jakewins/2.1-sharedupgrade

Fix rare race condition in Forseti lock manager
Fix a memory leak in RerferenceCache

The leak was caused by the fact that when inserting new data in the cache
noone is cleaning up the old GCed values still present in the cache.
Indeed the cleanup was triggered only by updating existing node which have
been GCed or at some extend by getting GCed values.

This PR also tries to improve the polling when during get/remove by looking
to the whole queue instead of just removing the single element.
Merge pull request #2686 from davidegrohmann/fix-leak-ref-cache

Fix a memory leak in RerferenceCache
Less complex branched data error messages.
Improved comprehensibility of database availability logging.

- We no longer use a counter for boot-strap availability, instead components
  mark themselves as blocking during startup, which means they will be included
  in the description of why the database is unavailable during startup.
Revert "Fix a memory leak in RerferenceCache"
Merge pull request #2689 from jakewins/2.0-brancherr

Less complex branched data error messages.
Merge pull request #2685 from jakewins/2.0-availabilitydec

Improved comprehensibility of database availability logging.
Update contributors list

Welcome Georg Summer!
Removes VersionAwareLogEntryReader.writeLogHeader

There was one version of writeLogHeader in VALER and one in
 LogEntryWriterv1. They were exactly the same, so one had to
 go. Having a write method in a reader class is weird, hence the
 version that remains is in LogEntryWriterv1
Adds support for extracting store version descriptor for versions earlier than the last legacy
Adds 1.9 version database for upgrade tests
Adds ignored IT for migration from 1.9 and some supporting classes for the 1.9 store
Moves LegacyStore to Legacy20Store and in its own package
Renames 2.0 specific StoreFile and 1.9 specific LegacyNodeStoreReader as such
Merge pull request #2692 from neo4j/revert-2686-fix-leak-ref-cache

Revert "Fix a memory leak in RerferenceCache"
Final changes for migrating directly from 1.9 stores

Introduces the LegacyStore abstraction for reading from legacy stores.
 The existing 2.0 implementation is renamed as such and the 1.9
 version implementation is added and improved to have the same
 interface.
The check for the migration checks the version and instantiates the
 correct version legacy store.
Provides a more comprehensive 1.9 store to test upgrades
Fix a problem with upgrading the label stores from 2.0 to 2.1

Basically, the label store files that the batch importer produces cannot be used,
so for 2.0 we leave the exising files be. Yet we still have to remember to copy
the label store files over for 1.9.