Fixed reader to properly protect its buffer.

Now we don't mix up buffers and get incorrect results in the process.
Another benefit is that we work on a single buffer for all steps, and in parallel,
using CPU caches as good as possible.
Fixed incorrect error handling when writing failed.
Improved error handling in preparation for atomic operation.
Initial version of atomic operation in case of sealed-copy.

as FileInfo.HasError doesn't work correctly, the entire thing is off.
Shall be fixed next.
Now missing files during verify will be properly handled.

Test for this is still missing, but there is an official todo for that.
Removed all pointers to FileInfo structures.

It's a light-weight struct, and we only pass around a few of them.
After all, heap work and pointers-special handling (ups, something was shared accidentally)
doesn't seem to be worth the hassle.
Changed pathMap to be a simple list, not using pointers anymore.

That way, we put allocation needs to a few big bigger and bigger chunks only,
without the need to keep track of many small objects.
Now destination files will not be removed if they already existed.

Errors caused by this will still count as such, but rollback doesn't affect it.
Added brute-force directory removal to the mix.

We could be smarter and keep a map of candidates, but that would stop
working when dispatched to write-controllers.
Now cleanup is parallel per device.

The benefit is that on valid trees, we will write the indices right away.