Make PushEvent's data payload binary instead of just a string

This exposes binary data as a Body mixin from the Fetch spec,
as discussed on https://github.com/w3c/push-api/issues/83
Yeah, response.text(v => v === "") is also how it works in Fetch (cannot be synchronous in Fetch). In Fetch we might expose the raw body as a stream at some point and at that point we will probably allow distinguishing between empty and missing (just like HTTP).

For a new protocol it might be best to define empty and missing as having identical semantics so APIs can be simplified somewhat.