Use 'exception' to reference thrown values
Reject promise when 'x.then' throws
Ensure in-order execution with trampoline
More refactoring of resolution propagators and when()

* Code more explicitly deals with state changes
* when() is now just a thin wrapper around the ResolutionPropagator class
* Lazily create PropagationPromise instances

Breaking changes:

* Removed `legendary.fulfilled` in favor of `legendary.when`, since the latter returns a promise if no callbacks are passed and also prevents promises-for-thenables.
Implement Synchronous Inspection Draft E

See <https://github.com/promises-aplus/synchronous-inspection-spec/issues/6>.

Notable difference from the draft is that I'm using `value` instead of `fulfillmentValue` and `reason` instead of `rejectionReason`.

Now using state inspection when resolving a promise.

Updated expected behavior of when(), which can now short-circuit application in case the value is a fulfilled promise.
Bump dev dependencies
legendary@0.8.0