First attempt at a Game of Life demo

The performance on this is, to no one's surprise, sub-par.

Also, need to rename cell_attr_coercion_funcs to something clearer, and
add fields for get/set so that we don't apply the function twice.
Add rows, columns properties to grid

I thought these were exposed before, guess not.
This can be optimized later to clean up cells outside the grid size.
Factor out basic demo grid setup

This code is in every demo in some way - pulling it out standardizes the
grid used and makes it easier to setup a demo and for others to read
through the code (I think)
Game of Life demo rewrite

The demo now uses the usual double 1-d array to compute cells, and shows
off using the 'alive' attribute to set color for us.

alive_to_color (The coercion function for the alive attribute) is
sufficiently short that I don't know if this demo is really showing off
anything clever.  This may get replaced if I can think of another
simple/classic grid demo that would benefit from overriding attribute
getter/setters.
Revert slicing change

I can't remember why I was using start stop step - probably so [x:-1:-1]
would resolve correctly.  I'll see if I can figure that out later.
Demo grid tweaks

odd number of rows/cols for blink demo to line up properly
Blink demo uses basic_grid
Pass caption to basic_grid
basic_grid returns display

Necessary when the demo wants to resize the window the grid is in (such
as large_grid)
large_grid uses basic_grid

This also demos how to adjust a grid after it's been created, as well as
the fact that the recalculate is only done when surface is called (and
not on each attribute change)
multi_select uses basic_grid

There wasn't a huge performance change going from 400 to 1681 cells,
which is nice.
select used basic_grid

Should be the last refactor for basic_grid