Replace du with python implementation.

The reason we got rid of the plain du is that we had to wait until
it finishes before terminating the thread that runs it. With those
changes we also put du in a separate 'producer' thread, that is
independent of the state of the partition collector process. The latter
checks the queue periodically to fetch the du results, but is not
blocking on them.

Kudos to Alexander Kukushkin for producing the du implementation that
is almost as fast as the native one.
Use custom implementation for df as well