… and runtests(text)
No reason to write results. The only places we looked at them were when calculating failures and in `check_test()`. So store failure count in the __tcache__ table, instead, and parse the test success and description from the actuat test string. With the overhead of __tresults__ eliminated, tests should run a little faster.
Include a test for it!
There are two major improvements: 1. Each test function is now run as a subtest, with its own plan, test count, and error messages. This is a more natual way for them to run, with independent plans that don't stomp on each other, and is fully supported by existing TAP parsers. The TAP output is different, though, so will require anyone using pg_regress to update their expected output files with the new format. 2. An exception thrown by one function no longer halts execution. Each test is well and truly run in its own subtransaction, which is rolled back. If a test function does throw an error (or any setup or terdown test that wraps it), just that subtest fails, and the error message is emitted as a diagnostic message. Starup and shutdown tests still cause a halt, however. Resolves #68.