Added dimensions and coordinates properties

Also added support for __add__ and __subtract__.  Made __getitem__ and
__setitem__ a touch more readable.
Iterate in row-major order

This is just a cosmetic improvement to match the rest of the API where
row-major order is assumed by default.
Cache coordinates list

We calculate the list of grid coordinates on the first request.
Subsequent access to the 'coordinates' property will produce the
cached value.

Resizing a grid will have to invalidate the cached value.