Ensure all tests have results before firing complete

This is also a refactor of test handling. No more simple urlQueue.

URLs are now generated by NullTest, Test, or LiteralTest.

We now collect test results, or an empty result if the test is 404 or times out. We do not fire complete until we got results for everything.

Previously, we'd fire complete when no more tests are in the queue. This was a problem for multiple browsers, since we would have the complete event fire when the queue is empty, but there could be other browsers running the final tests at the same time.

The mess that is mountpoint handling has largely been consolidated into TestSpecification#setMountpoint.

Test objects are created to belog in a Tests collection built by a TestSpecification. This may be too many layers, but it will keep the Batch module from growing bigger when it needs to be cleaned up already.