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
remove touchedId lists in Local/HttpRemoteRepo.

these in-memory lists are there only to clean up after a possible exception,
but they can become huge and consume too much heap. Getting rid of this clean
up eliminates the overhead. If an error occurred that leaves the repository
with too much garbage we could still make a clean clone though.
simplify BinaryPackedObjects by getting the object writer on demand
Improve BinaryPackedObjects to use one single ObjectDatabase.putAll call

BinaryPackedObjects.ingest() used onec ODB.exists() and ODB.put() call per
object received. Swiched to using one single call to ODB.putAll() with
the object stream transformed to an Iterator<RevObject> and using a
BulkOpListener to notify the Callback instead dramatically improves
the performance of fetch over http remotes.

BinaryPackedObjects.Callback was also made to return void and removed
its parametrized status argument since it was dead code.
Change BinaryPackedObject.Callback.callback(RevObject) to callback(Supplier<RevObject>)

Some callbacks don't need/use the argument object, so its
better to deferr its acquisition to when its really needed.
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