Separate Promise constructors for deferred, value, supplier, and error

Previously, Promise had a single constructor that took a value, a
supplier of a value, and an error. The requirement was that all three
values be null, or only one of them be non-null.

To enforce this requirement the constructor has been replaced with
four separate constructors. One that takes none of the arguments, and
one for each of the three arguments thereby ensuring the callers can
only set none of them or one of them.

The ability to set a parent on a promise that has already been
fulfilled has been removed. The parent was provided so that the
parent's outcome could influence the new promise's outcome. Given
that, in the case of an already fulfilled promise, the outcome is
already known providing a parent did not make sense.

Fixes #124