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.
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.
Merge remote-tracking branch 'origin/pr/738'