`read()` should not throw on empty buffer

There is no way to call `[[pull]]` without calling `read()` when you call `read()` on an empty stream its going to throw.

If this stream is modelling a pull style stream

```js
var stream = new ReadableStream(null, function pull(push) {
  setImmediate(function () { push(42) })
}, null)
```

Then you would be forced to call `read()` with a try catch to star the first `[[pull]]`

Instead we should return some special constant that indicates the `[[buffer]]` is empty.