Extended the Layer getRaster API to include loading with an extent.

This does not give back a raster with that specific extent, but
gives a raster with a RasterExtent that has an extent which
is the smallest extent that covers the passed in extent, that
snaps to the resolution of the layer's RasterExtent.

In the case of tiles, it uses a CroppedRaster to load to that
extent, as opposed to calling getRaster with a RasterExtent,
which loads a Raster with an ArrayRasterData.

Closes #477