Fixed last remaining assertion failure. Works beautifully now, writing about 1600 files/sec.

Added convenience functions function() and call() wrapping completion() for conveniently calling arbitrary functions e.g. ones from std::filesystem.

Added a when_all(...) which composes arbitrary parameters into a vector. I might remove this later, it's a bit dangerous.

Supposedly now traps lost exception throws. Except I'm pretty sure it doesn't yet.

Added a new unit test testing that exception throws are correctly trapped. Currently fails because std::filesystem::rename() happily overwrites destination files and throws no exception at all :(