dav: Implement push support

Implement push support for the webdav backend.  This allows large files
to be uploaded properly without consuming large amounts of memory and
also makes the progress bar work when uploading.

Data is provided to libsoup in chunks, activated via the wrote_chunk
signal.  Note that this uses content-length encoding rather than chunked
encoding which is not supported by many servers.  The CAN_REBUILD flag
is set on the SoupMessage and accumulate is set to FALSE so that Libsoup
does not buffer all the data in memory at once.  This does mean that the
restarted signal needs to be handled correctly by seeking to the
beginning of the file.

The code is written in an asynchronous fashion so that other operations
are not blocked since the webdav backend is single-threaded.
Unfortunately, this does complicate the code, especially with regards to
having reads in flight and handling the restarted signal from libsoup.

A quick benchmark writing to a tmpfs via Apache's mod_dav achieved
just over 1GB/s.

https://bugzilla.gnome.org/show_bug.cgi?id=570772