throw exceptions when accessing the result or error properties does not make sense, additionally support chaining resolve() and reject() methods, closes #2