Allow body to be consumed only once

This branch enforces [Section 5.2](https://fetch.spec.whatwg.org/#body-mixin) of the spec, which describes how the `bodyUsed` attribute restricts consuming the body more than once.

```javascript
fetch('/users').then(function(response) {
  // This promise resolves with the json object.
  var works = response.json()
  // This promise now rejects with a TypeError.
  var fails = response.text()
})
```

/cc @annevk on spec compliance here
you should always return a promise. `return error ? Promise.reject(err) : Promise.resolve(...)`