Significantly refactor harness.

Start a single httpd to run all HTML tests, loading them from a JSON manifest.
Added webharness/ to contain the in-browser harness code.
The web harness loads the JSON manifest, connects to a signalling server
using socket.io, and waits for the other client to be connected to the
signalling server before running tests.

Imported q.js as a Promise implementation to keep me sane while writing
all this asynchronous logic.