consolidating to stream and improving features

- one stream type crystallized
- it will be written which makes it a writable
- if it is piped it will be a transform
- a pure readable stream doesn't make much sense in sync scenario since that would just be a function that returns data on read
- adding _source and _destination which get setup via pipe method
- freeing upstream sources automatically when stream is freed
- example in readme