stream: Refactor onread callback handler

To prevent .push() from directly calling ._read()
stream: Change recursive _read() loop to a while loop