DataStore concurrency test that exposes concurrency issues.

For instance, it exposes the following concurrency issues:
- "refs/heads/master is not a symbolic ref: '<hash>'" IllegalArgumentException at
  FileRefDatabase.getSymRef() when multiple threads create commits.
- NoSuchElementException: No tree ref matched the name: <feature type name> at
  GeoGitDataStore.findTypeRef() on reader thread when multiple threads are reading and writing.
- FileNotFoundException "<path to repo>/.geogit/conflicts" at JEStagingDatabase.getConflicts()
  when multiple threads are reading and writing.
Make sure FileRefDatabase makes consistent reads and writes on ref files.
Make sure JEStagingDatabase makes consistent reads and writes on conflicts files
Make JEStagingDatabase.*Conflict() methods synchronize on namespace

This simplifies the code and avoid possible race conditions, and also
doesn't create unnecessary empty conflict files every time ConflictInterceptor
checks whether there are conflicts.
Fater check for conflicts before running every command.

This patch adds a hasConflicts(String ns):boolean method to
StagingDatabase as a faster check for ConflictInterceptor
to verify if the command cannot be run when conflicts exist.

Previously, ConflictInterceptor was loading the full list
of conflicts to check for its size, which can be really slow
if the number of conflicts is large.