Enablement: ability to store packfiles via a pluggable transaction

Git operations such as git-receive-pack(1) and git-fetch-pack(1) write objects into packfiles. This is often done by creating a temporary packfile that objects are first written to before moving the packfile fully into place in the ODB. This operation is exactly what an ODB transaction is supposed to facilitate and manage. Instead of explicitly creating these temporary packfiles, create a generic interface for writing objects to a transaction that produces a packfile when committed.

Edited by Justin Tobler