[dm-bufio] patch from Mikulas
[dm-btree] micro optimisation in dm_btree_del

Remove a visited leaf straight away from the stack, rather than
marking all it's children as visited and letting it get removed on the
next iteration.
[dm-block-manager] expose the dm_bufio's prefetch functionality
[dm-btree] Prefetch child nodes when walking the tree for a dm_btree_del.

Prior to this many node visits were causing a synchronous read.
[dm-space-map] Optimise sm_ll_dec and sm_ll_inc

Prior to this patch these methods did lookup followed by an insert.
Instead they now call a common mutate function that adjusts the value
according to a callback function.  This avoids traversing the data
structures twice and hence improves performance.
[dm-block-manager] Make block locking configurable.

At the moment block locking only serves as a sanity check for code
that uses the persistent-data library.  Turning it off can save a
small amount of time in some circumstances.  For instance deleting a
thin volume with 1 million unique mappings goes from ~9 seconds ->
~6.5.

Not sure if this should go upstream.  The plan after all is to use
block locking to allow concurrent lookups and insertions into btrees
via a rolling lock scheme.  Keeping this in my tree since it's useful
to regularly assess the cost of block locking.
[dm-space-map-disk] Don't waste time spotting blocks that have been allocated and then freed in the same transaction.

The extra lookup is expensive, and I don't think it really gives us much.

FIXME: run full regression suite, since I suspect it breaks a test.