Simplify initialization logic

If there's always a stub function for [[on*]], then fewer conditionals
are necessary.
stream.buffer -> stream._buffer

For consistency's sake.
Add pipeTo

But it's still untested (needed BaseWritableStream first), so it may
still be filled with bugs.
Refactor out RandomPushStream for reuse

Too useful to not have around for other test cases. Also that test file
was starting to look pretty long.
Add BaseWritableStream

Tests are still nowhere near complete, but unlike BaseReadableStream,
all the methods are present.