Enable windowed read and write.

This is done by extending the existing read_band() and write_band()
methods. The windows that can be read and written most efficiently
are the ones that come from the new block_windows property.

Closes #6.