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.
Some fixes to remote url handling.

It fixes an issue with local remotes containing spaces, which could not be used since they were URL encoded
It also solves issues in windows with backslashes
Added functional tests with parameters including blank spaces
 Make JEStagingDatabase.*Conflict() methods always synchronize full conflict's file path

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.
Merge pull request #678 from groldan/concurrency

Fix concurrency issues with the file ref database and JE staging area
Faster 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.
Remove calls to setDoOutput(true) on HTTPUrlConnection when not doing output.
Remove print of http message body to console introduced accidentally at 5e19dbf1.
Merge pull request #676 from volaya/spaces

some fixes to remote url handling.
Adjusted the way push handles “nothing to push” situations.

Nothing to push is no longer treated as an exception.
PushOp will now return true if data was pushed, false otherwise.
Merge remote-tracking branch 'origin/pr/682'
Merge remote-tracking branch 'origin/pr/685'
Do not inject ObjectSerializingFactory instance for persistent object databases.

Storage backends should be in control of their serialization formats to ensure consistent behavior.
It is not desirable for clients to be able to switch the serialization format at will.
Refactor the Status CLI command into an internal StatusOp command.
make StatusOp return lazily evaluated iterators.
Merge pull request #686 from groldan/status_op

Refactor CLI status command to call an internal StatusOp
fixed ApplyDiffOp to avoid errors with missing nodes
Properly handle unqualified ref names in local push
Test for qualified names in push