stream: Refactor onread callback handler

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