Uncatchable assert

Mostly working spike on making an uncatchable assert.

The over arching idea is to mimc chromes `console.assert` which has some interesting properties.

1. uncatchable by user code (appealing)
2. does not block execution (I have mixed feelings)

This PR also adds an `expectAssertion` helper, and could likely lead to an additional  `expectAssertions` helper. I found that expectAssertions was a net benefit to the test suite,
and should likely remain in some form, even if we decide not to go with na uncatchable assert.

Caveats:
- firebug's console.assert isn't synchronous. (we can snif and still polyfil this by checking if the function is a native method or not)
- the polyfill may be annoying to use with development tools 


I would like to hear your thoughts and concerns.