Attempt at a read_extra() method.

Until now we've required that read windows be subsets of the dataset's extent. This PR lets us read windows that go beyond the dataset's extent, padding the extra space with nodata.

I'm tentatively calling these "greedy" reads, but check below for other possible terms.

Closes #190.