Initial code

This demonstrates a basic go project with a test file.  Run 'go test' to see
the test file executed.
Our first failing test

* Import the testing package to have access to the test suite
* Name a test function 'Test[Descriptive Name]' and have it accept a pointer to a testing.T struct
* We can use t.Error to report failures in tests
Make first test pass
Second test

This test demonstrates the use of t.Errorf, as well as test fall-through. A
failed tests in go do not stop the test, unless t.Fatal(...) or t.FailNow()
is called.
Demonstrate using the assert package from testify

Unlike asserts from conventional test packages in other frameworks, the
testify package follows Go convention and allows tests to continue after
encountering an error.  Here we see assert.Error, assert.NoError, and
assert.Equal. assert.Equal has a slight caveat: if we are comparing a defined
type it makes a binary comparison between the two objects, showing the results
in hex instead of the pretty-printed format.
Make second test pass
Add another test that expects an error
Change similar tests to be table driven

Here we use a slice of an anonymous struct with a for/range statement to
easily represent our tests that return errors as a table. This reduces
redundant code and improves clarity.
Add two more tests to demonstrate failing table tests
Make all tests pass
Implement stringer interface on PhoneNumber with test
Change format of phone number stringer

Note how the comment at the top of String() no longer matches the output of
the function.
Change Stringer test to use Example code

* Note that by using an example, instead of a test, we can ensure that code and
documentation remain in lockstep. The input and output of the example show up
in the documentation, and if the executed function does not match the expected
output then the test fails.
* Examples must begin with Example, accept to argurments, and what follows
Example must match the name of a function.
* As the test here is for a method on a type, we use [type]_[method] as our
function name.
Extra check to demonstrate code coverage tool

* You have to have the cover tool installed first
* 'go test -cover' shows the current code coverage as a percentage
* 'go test -coverprofile=test.out && go tool cover -html=test.out' will show
coverage using the pretty html viewer
Merge branch 'testing-basics'

Testing in Go: What You Need to Know