destroyStream() does not trigger any useful events

* call `stream.end()` inside `destroyStream()`
* call `destroyStream()` when the other side ends