Streaming api

This introduces a memory efficient streaming API which allows writing sheets of arbitrary length in constrained memory environments. An example of how to use streaming is found in ```examples/large/main.go```. This makes an effort to maintain backwards compatibility at the API level.

There are some more changes which I'll send in separate pull requests, which improve compatibility with other spreadsheet software (Libreoffice, Gnumeric) and add some performance improvements.