Generalizes random puzzle generation
Adds tests for #random_puzzle
Begins writing #solve
Refactors #solve

This is likely less readable than the `case` statement it's replacing, but I couldn't resist using a one-line double ternary for this. YOLO
Updates spec_helper

Adds a `config.mock_with` block to suppress deprecation warnings when using `stub` in specs. When calling `solve` on insoluble or already solved grids, an appropriate message is printed to the console in addition to passing back a value. I use `stub` in the specs to prevent this message from being written while running tests.
Adds tests for #solve