move all the disk writing to disk_writer thread

when a blob is about to be written to disk, we just
store the directory in which it should be written in
b->fallback, after that we enqueue it in the disk_writer's
queue, and it picks it up and writes it to disk

it is sub optimal at the moment, because it is doing
open,write,fsync,close per blob, and we should group those
per destination, but that is a different issue.

the disk_writer_thread is a bit simplified version of
worker_thread, but it collect stats the same way, so we
can use them there as well.