refactor sqlfs_proc_truncate to use new set_value() to be more efficient

sqlfs_proc_truncate used to first read the entire contents of the file,
then alloc more memory if the truncate extended the file, then pass that to
set_value() to write.  Now set_value() only needs the changed part of the
file, so truncate now only reads the existing size from the file, then only
allocates memory if the truncate extends the file. When it allocates
memory, it only allocates a buffer the size of the extension, not the whole
file.

fixes #553