Use Error type for exceptions

Resolves https://github.com/purescript/purescript/issues/474
What's the expected semantics here?

When would `e` not be an `Error`? If someone throws something that isn't in the `Error` hierarchy? Could we wrap that thing in an `Error` and handle it immediately, rather than `throw`ing something we can't actually catch?

```javascript
if (e instanceof Error) {
  return c(e)();
} else {
  return c(new Error(e))();
}
```

As it is now. This is a runtime exception we can't actually handle. 

Unfortunately, it's also not a matter of wrapping the library throwing the non-error and calling it a day. This check will fail in NodeWebKit, since it uses two different contexts with different prototypes. So, what is thrown as an `Error` on the `node` side, will not be an instance of the window's `Error` because the prototypes are different. There's no way around this prototypal difference

I understand you shouldn't be concerned with what some random library does, but I think this happens for anything with a different context, like iframes, so, this might be more painful than first thought.