always throw instances of Error so that  the `stack` property is available. also, many libs expect `instanceof Error` to be true.