Basic functionality

Currently unconstrained (not on top anywhere) rows and columns are
omitted from the solution; they should be given an arbitrary color
at the front of the order.
Puzzle.toString

It's not an inverse of Puzzle.fromString, but it's enough for debugging.
Solution.complete
Effector; cmdow.exe helper

We use cmdow.exe to find the Strata window, because Windows doesn't expose
this information except programmatically.  (You can't even get it with
PowerShell without writing your own cmdlets.  Get-Process will lead to you
to the main window handle, but there's nothing to do with it.)

Effector currently just solves 3x3x2 puzzles, but it can be generalized.
Solver exposes satistics
Generalize to more colors
Remove commented sleep; we use Robot's autodelay
Track the current color to save clicks

I guess we should have Solution.complete use color 1 because that's what
we start with active...
4 colors supported
Tighten delay

150ms is too fast when we're selecting two ribbons of the same color
back-to-back (with current-color tracking).
support for averaging color over 8 pixels

Turns out the color misdetects are actually because there's a fade-in
effect on the color selectors at the bottom of the screen.
Compute cell points from row/col points
Generalize over cells, support 4x4 puzzles
Play a wave at a time
Enable 9-pixel averaging

Robot.getPixelColor is oddly slow, so we now take screen captures.

This still doesn't work particularly well -- Euclidean distance in RGB
doesn't map well to human perception (which the game is optimized for).
Use a better color difference metric
Wait longer for puzzles to fade in
5x5 puzzle support
5 color support
6x6 puzzle support

This commit also introduces a more concise way to specify the row and
column points, which could be used to simplify the other puzzle sizes'
constants, and then the CELLS_N constants could be replaced with a loop in
a static block.