Improved Promise tests, and added support for async testing

Closes #247. This makes the Promise test call `Promise#then` and Promise#catch` and checks what behaviour results, and also adds `Promise.all` and `Promise.race` tests.

In order to get the Promise test to work, I needed to implement asynchronous test result writing. To do this, test functions may now, instead of returning true/false, instead at some point call `asyncTestPassed()`, which is a function of no arguments, provided by the testing environment, that registers the test as passed regardless of execution order. `build.js` has been updated to provide such a function (which manually updates the class and text of the corresponding `<td>`) as has the `node.js` test runner script.

The historical results have not *yet* been re-verified (WebKit, Chrome 33 or Firefox 29 might actually fail these new tests).