workaround for tinkergraph database be open by multiple processes
guard FileRefDatabase from trying to resolve directories as refs
Allow a repository to be used by multiple processes concurrently.

A new Hints class contains flags to indicate whether the object and staging databases,
as well as remote repositories, should be open in read-only mode. It is injected
through Guice on the components that can make use of them.

CLI commands can easily state how they operate on those components by using the
following annotations:
 - @ReadOnly: purely read only command (e.g. diff, cat, show)
 - @ObjectDatabaseReadOnly: command modifies the staging area but not the
                            object db (e.g. add, clean, remove)
 - @StagingDatabaseReadOnly: command modifies the object db but not the
                            staging area (e.g. clone, pull, tag)
 - @RemotesReadOnly: command uses remote repositories but only for reading (e.g. fetch, pull)

The CLI application now opens and closes the repository on each command, locking
the databases for write access on a command by command basis as needed, and hence
allowing multiple processes to run read only commands concurrently, and failing to
execute write commands if another process is locking the dbs for write access.

The functional tests are adapted to handle test data setup by acquiring a disconnected
read-write GeoGIT instance from the cli whenever needed and closing it when done setting
up the test scenario.

Also a lot of code duplication was removed from functional tests as different packages
had duplicated step definitions. They now use the Cucumber "glue" option to indicate
where to look for step definitions.
Merge branch 'master' into command_hints

Conflicts:
	src/cli/src/main/java/org/geogit/cli/CLIInjectorBuilder.java
	src/cli/src/main/java/org/geogit/cli/GeogitCLI.java
	src/geotools/src/test/java/org/geogit/geotools/cli/test/functional/IniOracleProperties.java
Merge remote-tracking branch 'origin/pr/593'