WritableStream: [[error]] must replace [[writablePromise]]

When a WritableStream is in a writable state, [[writablePromise]] is set to a fulfilled promise. We need to replace it with a new rejected promise.

In writable-stream-abort.js, 'Aborting a WritableStream causes ...' test is testing a WritableStream in writable state which now returns a pending promise which gets rejected but this should be a fulfilled promise to be consistent with the initial value of [[state]] that is 'writable'. We need to fix this behavior later but for now just put the WritableStream in 'waiting' state and test what stated in the test description.
Refer to the reference implementation for pipeTo.

Keeping the code in sync between the README and the reference implementation is just silly.
Promise.race() based select like pipeTo implementation

Also adds more test cases for pipeTo