switching implementation to use streams 2/3

- using readable-stream module to be consistent across all node versions
- adapted typical readable implementation to buffer errors and warnings
  the same as data and to ensure we emit no more after destroy() is
  called
- ensured that pause/resume works as before
- updated readme and examples to new implementation