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`.
When reading from a channel with a known length, we need to record how much we've already read so we know when to stop. Currently, we create this state implicitly by partially applying `read`.
Having a `reader` store this makes the state explicit.

Writer doesn't need any state currently, although there is a TODO in `Fixed` about checking that the correct length is written.