Explicitly aggregate deferred writes into a batch. When we
submit, take the opportunity to coalesce contiguous writes.
Handle aio completion independently from the original txcs.
Note that this paves the way for a few additional steps:
1- we could make deallocations cancel deferred writes.
2- we could drop the txc deferred states entirely and rely on
the explicit deferred write batch machinery instead... if we
build an alternative way to complete the SharedBlob writes
and ensure the lifecycle issue are dealt with. (I'm not sure
it would be worth it, but it might be.)