TestHelpers.runAsyncAssertions

If any of the promise callback throws, including an assertion error, the erorr
is swallowed by the promise, so the test runner never gets it, which, for async
tests make the test just time out, without showing any failure at all.

This is confusing and inconvenient to debug.

runAsyncAssertions remediates the problem by taking the assertions out of the promise
flow with setTimeout(), so that assertion errors are appropriately reported.
Run integration tests by default

Before this integration tests were “.skip”ped with Mocha’s nice
`describe.skip` thingy. So everytime I would update the libraries, I
would run around and remove the “.skil” suffix to let them run and see
if the code using those libraries still work.

This was kind of tedious, so I now introduces a mechanism to run or skip
them based on a flag in the location.hash. And this fells much better! ;)

I also switched my pre-commit git hook to run all the test, including
integration ones.