Split Fixed uploads into chunks

Instead of reading the entire upload into a single string, we now return one chunk each time the underlying [read] call returns some data. This avoids using large amounts of RAM, hitting the 16 MB string limit on 32-bit systems. It also allows the application to begin processing the data before it has all arrived.

Fixes #153.

Possibly we should also adjust `Chunked` to stream the individual chunks rather than using the uploader's chunk size too, but this is enough to make it work with `curl -T`.
To make this code clearer, I think we'll need to change the API in `transfer_io.mli`. It's currently:

    module Make(IO : S.IO) : sig
      val read : encoding -> IO.ic -> chunk IO.t
      val write : encoding -> IO.oc -> string -> unit IO.t 
      val to_string : encoding -> IO.ic -> string IO.t
    end

I guess we'd want something like this:

    module Make(IO : S.IO) : sig
      type reader
      type writer

      val make_reader : encoding -> IO.ic -> reader
      val make_writer : encoding -> IO.oc -> writer

      val read : reader -> chunk IO.t
      val write : writer -> string -> unit IO.t 
      val to_string : reader -> string IO.t
    end