[refactor] redesign DMAs to support layouts
Refactor the DMA API to work on layouts internally. The resulting code ends up simpler for most cases, as long as we add a generic copy function. One things missing: - a good API to expose the collection of copy functions we have. One question not solved: - should the DMA ask for a copy function on each operation ?