session: implemented prepare/write/commit methods, use io.Reader in upload

These methods are used for large file upload - we prepare enough
space on disk, put multiple chunks into the file and then
commit desired size. Default chunk size is 10m, files less than that
are read into memory and uploaded via common write_data() method.
Reading from io.Reader can return less than maximum chunk size,
we start writing data into elliptics as soon as there is something.

Since upload methods are now using io.Reader they do not buffer
too many data, at most chunk side per goroutine.

Returned channel yet contains a mess of combined json objects each
per written chunk, this will be cleaned next.