Make asking for a single row return a single-row BlockGrid instead of a list.
Make it so Block._row and Block._col is always set by BlockGrid.

Since Block objects can be in multiple BlockGrids of different sizes
via slicing and views the meaning of the .row and .col attributes can
get a bit confused. This change makes it so that the BlockGrid being indexed
sets the Block._row and ._col attributes before returning it so that it has
the correct placement in the containing BlockGrid. This can mean that
*the same* Block can have different .row and .col attributes depending which
BlockGrid it is accessed from.

The real place I can think of that this might turn out to be a bit odd is in
iterating over a slice, as in `for block in grid[3:8, 3:8]`, in which case
the first block returned will have .row and .col of 0.
Raise a TypeError when indexing with a length one tuple.
Adding a .colors attribute to Block.
Adding unit tests.
Rerunning notebooks to make sure everything still works.
Updating change log for v 1.2.
Bumping version number.