Use "Type(x) is Object" instead of IsObject(x).

The ES spec does not actually contain the latter.
Add property attributes for `Promise[@@create]()`.
Add "Abstract Operations for the Promise Constructor."

This puts "newly-created Promise object" on more solid ground and helps separate the steps more clearly.

As part of this all new text was written keeping the formatting and editorial tweaks of #34, #37, and #49 in mind.
Some formatting cleanup and header rearranging.
Formalize deferreds; make ToPromise handle edge cases.
Make GetDeferred handle edge cases.

This should help take care of #51 (although as of yet most consumers of GetDeferred don't handle abrupt completions).
Editorial/formatting tweaks to the easy abstract operations.

(Alphabetizing as I go.)
Rewrite Then to handle more exception-related cases.

Small change: upon encountering a throwing `constructor` property, it now passes that through, instead of transforming it into a rejection. This fits with my new don't-protect-the-user-from-themselves style, but we'll want to revisit this general stylistic decision at some point to be sure it's the right one.
Editorial and exception-handling cases for PropagateDerived.
Editorial/exception-handling for constructor and prototype.

As before, more exceptions are now possible. I will open an issue addressing exceptions soon.
Alphabetize constructor and prototype properties.