fixed issue in ResolveFeatureType operation when repo is empty
Modified import operations to avoid changes in feature types and prevent creating trees with mixed feature types

Importing different feature types is still allowed, but it has to be explicitly indicated
fixed issue in FeatureDiff when computing diffs including feature type changes
Merge remote-tracking branch 'origin/pr/703'

Conflicts:
	src/geotools/src/test/java/org/geogit/geotools/plumbing/ImportOpTest.java
Deferr connecting to the server until needed to avoid ReadTimeoutExceptions on the server.

HttpRemoteRepo.sendPackedObjects is connecting to the remote too early. The call
to BinaryPackedObjects.write can take a while before using the provided output stream
which can cause read timeouts in the server. Using a Supplier<OutputStream> instead
helps by deferring the connection until its actually needed, avoiding the timeout in the server.
annotate rebuild-graph with @StagingDatabaseReadOnly instead of @ReadOnly.

The JEObjectDatabase could not be updated if the @ReadOnly annotation is present
Merge remote-tracking branch 'origin/pr/738'
remove @StagingDatabaseReadOnly annotation from CLI's clone. Sparse clones use the staging db.
Performance fix WorkingTree.getTree() and Index.getTree()

Both methods were forcing an update to the ref database even if not
needed, making calls inside loops too resource consuming esp. since
FileRefDatabase calls on File.syc().
Make BinaryPackedChanges.CHUNK_TYPE.value() abstract, each enum instance provides its own
Simplify BinaryPackedChanges usage of serialization factory
Remove parametrized type and state argument to BinaryPackedChanges.Callback. It was dead code.
just a revisit note for BinaryPackedObjects/Changes.CAP
Fix bug on sparse cloning missing feature-only metadata ids and other small improvements.

BinaryPackedChanges was exporting the RevFeatureType metadata only from
trees, but the object model allows for specific features inside a RevTree
not to share the tree node's metadata id.

Removed the CAP instance variable and changesSent method variable
since changesSent was not being incremented and hence it was dead code.

Made it so a byte[] does not need to be cloned for each object written.
Make clearer what BinaryPackedChanges.ingestOne does.

The treatment of the DIFF_ENTRY marker hijacked as METADATA_OBJECT_AND_DIFF_ENTRY
because METADATA_OBJECT_AND_DIFF_ENTRY have read the object that corresponds
to DIFF_ENTRY was tricky and confusing

Also avoid the ObjectDatabase.exists(oid) check before ObjectDatabase.put(RevObject)
because its overkill and unnecessary most of the time. In the event that an object
already exists the ObjectDatabase contract states its not replaced.
Use FormatCommon.readObjectId and avoid the code duplication
Make BinaryPackedChanges.ingest() do a single ObjectDatabase.putAll() instead of several put() calls.
remove dead code and count objects processed in BinaryPackedChanges
Use a Set instead of a List to speedup contains check on FilteredChangesResource
Don't try to move objects already present in the objects database.

AbstractMappedRemoteRepo.fetchSparseCommit relies on the filtering iterator
to ingest the incoming objects and save them to the objects database. So add
a flag to WriteTree not to call DeepMove as there's no need to move stuff
from the staging database to the objects database.