This depends on !1294 (merged) and is only lightly tested. I am sending this out to get early feedback.
The main change is in the last commit. It changes the transfer queue to patch transfer commands into the cmdbuf at where they should be, rather than having all of them at the beginning of the cmdbuf. This allows us to get rid of