Encode into binary only if needed

Adds a check for binary data in the payload (`.encodePayload`) with `has-binary`.

This way we don't make unnecessarily complicated decoding of strings back from the binary format when we really don't need to (since all packets only contain strings). We also avoid OPTIONS requests when the octet-stream content type is not really needed, like in the case of an actual binary payload.

Attached is a test case that fails currently, but starts passing with the applied check for binary.