vm: call window.onerror manually ourself on unhandled exception

This removes the needs for workarounds like trying to stuff a full
stacktrace in 230 bytes, as well as allowing window.onerror access
to the exception instance even on browsers that don't support that.
fix typo in nodejs error handler
workaround for signal handling assertion error on windows (joyent/node#7701)
debounce ObservableVar
fix blocklambda break / par tailcall edge case
assert: add `suspends` function, and return original value from ok/notOk
added sequence::mirror
mirror tests: document behaviour for streams with slow retraction code
Fix reentrant loop abort edge case (fixes sequence::mirror)
Stratum::abort(): don't leave execution frame continuations dangling.

When abortion of an execution frame yields an execution frame `ef`, we must
always set a parent on `ef`, otherwise subsequent calls by `ef` to its
parent might end up at an execution frame that has dropped out of the tree,
and cause aborted loops to continue running (an edge case that I observed in
a simplified version of sequence::mirror).

Fixing this issue causes a couple of reentrant abort tests in sjs-2-tests
to fail. The upshot is that in the current VM we cannot rely on contiguous
(non-blocking) code to be executed atomically after an abortion, e.g. code
across a loop break will only run to the `break` after a reentrant abort.

In practice this doesn't matter that much, but we should rewrite the abort
code path of the VM at some point, so that code is always run contiguously
until a suspending frame is encountered.
typos
docutils: add 'directive' symbol type
simplify sequence::mirror
disable reentrant abort/break tests pending a VM abort path rewrite
remove erroneous 'debouncing' in observable::observe().
object::override: allow undefined arguments
minor doc fix
fix typo in sjs:bundle
object::ownKeys: just use Object.keys, as its faster & errors for non-object types
fix silently-passing documentation test code