REFACTOR - Enable auto-complete for make

make is a tool for automating commands for easy discovery. I'm using
make to run the tests across four different ruby versions.

However, if you name your `Makefile` with a lowercase `m` then make
won't tab-complete the commands! Oops!
Refactor - Heavily annotate Makefile

Makefiles are powerful but somewhat tough to comprehend. Let's make this
one a decently readable version for all who come after.
RED - Wire up our testing framework

First things first, we want to confirm that our testing framework is
giving us the right feedback.

So we write a failing test that doesn't really test our system and watch
it fail.

This proves that:

1. We used the right syntax to actually start testing (If I had a dollar
   for every time I've forgotten to put `test_` in front of a test case)
2. We can actually run the tests properly from the command line (`ruby
   test/all.rb` should do it!)
3. We can interpret the results of the test output correctly. You should
   see something like this:

>     1) Failure:
>     TestGameOfLife#test_failing_test [test/all.rb:5]:
>     Expected: 1
>       Actual: 2

Defining a Test Suite
=====================
Pay close attention to the line `class TestGameOfLife < MiniTest::Test`
We're defining a test suite by creating a class that is a "child-class"
of MiniTest::Test. Child classes  "inherits" all the behavior of their
parent, in this case MiniTest::Test class.  MiniTest::Test itself "Is a"
child of MiniTest::Runnable. Because our test is a grand-child of
MiniTest::Runnable, MiniTest knows it is a test suite and will run it
when we run `ruby test/all.rb`.

 * MiniTest::Test inherits from MiniTest::Runnable:
   https://github.com/seattlerb/minitest/blob/5b19a1b6a5d773249e4af8062922cdd88cb7d7bc/lib/minitest/test.rb#L10)
 * How MiniTest tracks which child classes inherit from MiniTest::Test
   https://github.com/seattlerb/minitest/blob/f08249ca6fcee2e20139c796027c4df9e538201b/lib/minitest.rb#L255-L258
 * MiniTest runs each of the test classes:
   https://github.com/seattlerb/minitest/blob/f08249ca6fcee2e20139c796027c4df9e538201b/lib/minitest.rb#L141-L152

Syntax Breakdown
================

`require "minitest/autorun"` - This includes the code to tell minitest
to execute the tests. Once I have tests in multiple files I extract this
to a shared test helper so I can run each test file individually.

`class TestGameOfLife < MiniTest::Test` - Here we're creating a "class"
named TestGameOfLife to contain our test cases and saying TestGameOfLife
"is a" MiniTest::Test. This is an instance of "parent/child"
inheritance.

`def test_failing_test` - This defines an instance method on the TestGameOfLife
class that follows MiniTest's rules to be a runnable test case.
  * MiniTest builds a list of methods that are runnable test cases:
    https://github.com/seattlerb/minitest/blob/f08249ca6fcee2e20139c796027c4df9e538201b/lib/minitest/test.rb#L61-L73
  * MiniTest runs all the runnable test cases:
    https://github.com/seattlerb/minitest/blob/f08249ca6fcee2e20139c796027c4df9e538201b/lib/minitest.rb#L278-L291

`assert_equal(1,2)` - We tell MiniTest to mark the test as
failed if 1 is not equal to 2. Since 1 is not 2, we expect this test to
fail. MiniTest raises a MiniTest::Assertion when a test fails. Think
of an exception as a table flip: (╯°□°)╯︵ ┻━┻. MiniTest catches the
MiniTest::Assertion and puts it back, making note that the test failed
┬─┬ ノ( ^_^ノ). If any other exception is raised, MiniTest marks the
test as having had an UnexpectdError.

  * MiniTest's `assert_equal` definition:
    https://github.com/seattlerb/minitest/blob/f08249ca6fcee2e20139c796027c4df9e538201b/lib/minitest/assertions.rb#L162-L165
  * MiniTest's `assert` definition:
    https://github.com/seattlerb/minitest/blob/f08249ca6fcee2e20139c796027c4df9e538201b/lib/minitest/assertions.rb#L125-L133
  * MiniTest catches the MiniTest::Assertion and fails the test:
    https://github.com/seattlerb/minitest/blob/f08249ca6fcee2e20139c796027c4df9e538201b/lib/minitest/test.rb#L204-L214

`end` - Both `def` and `class` open up a grouped chunk of code. Ruby
requires us to close our code chunks by typing the word `end.` If we
didn't have the `end` we'd see an error that looks like:

>       syntax error, unexpected end-of-input, expecting keyword_end
GREEN - Proves our testing framework passes tests

Expected Output of `bundle exec ruby test/all.rb`
=================================================
> Run options: --seed 22757
>
> # Running:
>
> .
>
> Finished in 0.001062s, 941.6196 runs/s, 941.6196 assertions/s.
>
> 1 runs, 1 assertions, 0 failures, 0 errors, 0 skips

Ah, the joy of a fully passing test suite. Hooray! Now we can get down
to business!
REFACTOR - Proving the suite works is no longer necessary.

Expected Result of `bundle exec ruby test/all.rb`
=================================================
> Run options: --seed 43108
>
> # Running:
>
>
>
> Finished in 0.000915s, 0.0000 runs/s, 0.0000 assertions/s.
>
> 0 runs, 0 assertions, 0 failures, 0 errors, 0 skips

Now that we've demonstrated to ourselves that the test suite works, we
no longer need the meaningless test case. Let's delete it now to avoid
confusion later.