Node-tap is actually a collection of several modules, any of which may be
mixed and matched however you please.

If you don't like this test framework, and think you can do much much
better, I strongly encourage you to do so! If you use this library,
however, at least to output TAP-compliant results when process.env.TAP
is set, then the data coming out of your framework will be much more
consumable by machines.

You can also use this to build programs that consume the TAP data, so
this is very useful for CI systems and such.

tap-assert: A collection of assert functions that return TAP result
objects.

tap-consumer: A stream interface for consuming TAP data.

tap-producer: A class that produces a TAP stream by taking in result
objects.

tap-results: A class for keeping track of TAP result objects as they
pass by, counting up skips, passes, fails, and so on.

tap-runner: A program that runs through a directory running all the
tests in it. (Tests which may or may not be TAP-outputting tests. But
it's better if they are.)

tap-test: A class for actually running tests.

tap-harness: A class that runs tests. (Tests are also Harnesses,
which is how sub-tests run.)

tap-global-harness: A default harness that provides the top-level
support for running TAP tests.