Conform to Promises A+

1. Removed `RESOLVING` and `REJECTING` - these intermediate stages should not be seen by the callbacks anyway.
2. Deferred's throw an error if an attempt is made to resolve/reject a Deferred object which is no longer in progress.
3. If a rejected handler returns a value, then any chained promise is resolved.
4. Callbacks which are not coderefs should be ignored.

I haven't updated any docs or tests yet - want your feedback first.