Moved solve button.
Prep for smaller contradiction searches: extract per-row and per-column contradiction functions. Minimal performance difference.
Change streakValue variable to be an int in 3 in a row contradiction tests.
Basic intra-row and intra-column contradiction checks only run on the dirty grid row
Prep for smaller contradiction searches: extract inter-row and inter-column contradiction functions. Might be slightly faster.
Smaller contradiction searches: inter-row and inter-column contradiction checks only run on the dirty grid row or column
Solve some easy cases before recursive solve
Switch back to functional recursive solve instead of dancing links style. Hurts performance for now, but will allow more easy case solving.
Using fixed and improved solving code for easy cases. Now fills in easy cases recursively
Extracted some boiler plate from easy case solving code. No performance change.
Added better measuring code that solves the same grid repeatedly.

This is now required because the solve time is so quick that the jitter between runs was significant. :D
Solve more easy cases where rows and columns are like this: --0-0--
Update documentation.
Row and column fill tracking, with early abort from row / col are identical. Slower but has potential.