makes the exception handling closer to Promises/A+ specification

- even onFulfilled handler can be undef
- exceptions thrown in onFulfilled an onRejected handlers (args of then) are caught
- resolve and reject method prevented to be called more than once
- if onRejected handler returns value (does not throw exception) the promise is fulfilled

- intermediate states (REJECTING, RESOLVING) dropped
- the promise of deferred object is not a property, but is created on the fly
   ( to prevent circular reference)