Optimize unary local raster operations.

This checkin removes the old UnaryLocal machinery that was causing significant
slowdown through the introduction of int boxing.  Instead, the unary local operations
(which are quite simple) simply extend OpN.

The Identity operation has been removed, as it is redundant given CopyRaster.

A compiler bug forced the geotrellis map algebra style implicits to be moved to
geotrellis.Implicits.
Create Bit-, Byte-, and Short-backed RasterData implementations.
Refactor IntRaster, RasterData and friends.

This is a pretty major refactor that renames IntRaster to Raster. It also has
some changes to the various RasterData classes to help with performance and
compatibility.
Add LazyRasterData classes.

This commit adds a lazy/strict raster data distinction. It also implements a
number of (currently unused) lazy raster data classes.
Refactor readers to use StrictRasterData objects.

This replaces the use of Array[Int] in most cases, and paves the way to readers
which can initialize other types of RasterData, e.g. Byte-, Short-, or...
(gasp) even Double-based RasterData instances!
Update arg8 and arg16 readers to use newer RasterData.

This change moves us closer to (transparently) using Byte- and Short-backed
rasters for arg8 and arg16 rasters. It also fixes the NODATA translation
support (e.g. converting -128 <-> NODATA for Byte).

Future work: we should move away from a global NODATA constant and toward a
raster-based value, so that we can stop doing NODATA translation (and also so
that Double-based rasters won't have a weird hole at -2147483648.0).
Add arg16 case to raster loader.
Add support for Float- and Double-backed rasters.

This commit adds (untested) support for the float32 and float64 datatypes.
These rasters should be compatible with existing (Int-based) operations, but
will lose precision in those cases. Operations wanted to operate on floating-
point data will need to use applyDouble() and updateDouble(); currently apply()
and update() are used instead.
Test basic DoubleArrayRasterData capabilities.
Fix some bugs in RasterData and add documentation.

This stuff still needs more testing and tests.
wip
wip
Merge pull request #112 from non/topic/alt-raster-data

Topic/alt raster data
Move all methods assuming indexable data to ArrayRasterData.

All methods that assume that the underlying raster data can be indexed
via an integer (and that there are less than 2.1 billion cells) have been
moved from RasterData to a new ArrayRasterData class.  RasterData's array
like methods (apply, update) have been moved to ArrayRasterData.  RasterData
has a new method asArray that returns an ArrayRasterData from a given RasterData,
but use of that method in the future should be hidden behind code that handles
rasters that can not or should not be loaded into an in-memory array.
Update version number to 0.7.0.

As the API is significantly changed by the change to the Raster API, the version number must be updated.
Introduce basic TiledRasterData support, and related operations.

This commit introduces TiledRasterData, our first RasterData class that doesn't
extend ArrayRasterData. This means that actions on it need to be defined in
terms of traversing operations like map/foreach, or other kinds of
transformations, rather than treating it like an array.

In addition to changes to Raster/RasterData, the commit also introduces some
operations designed for tiled raster data.
Merge pull request #114 from non/topic/tiled-raster-ops

Introduce basic TiledRasterData support, and related operations.
introduce convert method, LazyConvert raster data
Fix PNG rendering in the demo.

Unfortunately, this commit encompasses a bunch of work. While moving the demo
code to a subproject (involving a lot of changes) I noticed it's PNG rendering
was broken, and stashed the work. This commit encompasses that change as well
as the work needed to fix PNG rendering again.

This includes a tweak to the LazyConverter raster data which prevents things
like map from exploding.