Add some writable stream error-throwing tests.
Fix closing writable streams with writes in flight.

When a writable stream has a write in flight, but is also in the writable state (due to a strategy with a sufficient high water mark), everything would break. It would end up in _doClose() too early, before the in-flight write finished. Now it properly queues the close and processes it after the in-flight write.