Use `toString` check rather than `instanceof` check.

Re: discussion in #1 Should fix wonky js context things.

This seems to provide the semantics of what the type specifies, since `throw`ing if we didn't immediately get an `Error` actually introduces back an `Exception` effect. which `catchException` is supposed to remove.
But then, don't we miss out on a user/library defined `Error` type? Since `{}.toString.call(myError) === '[object Object]'`. Or is there a way to make this work as well?

Again, I'm indifferent either way, because at least we've not got a runtime error now. But, I don't think this can be a simple one case check. There's multiple ways to construct an error that should be caught here, and we should have cases for each if we're going to do it right.

@paf31 thoughts?