Support uploading files directly from a string in memory by setting a `body` parameter

A Zendesk customer would like to use zendesk_api_client_php to upload files directly from a string in memory, rather than having to upload from a file on disk.

Reading through the code for the `Http::send` method in https://github.com/zendesk/zendesk_api_client_php/blob/master/src/Zendesk/API/Http.php, it does not appear that this is possible, or not possible cleanly. We always attempt to `fopen` and `fread` a file.

This PR adds support for a `body` parameter which contains the raw data to upload. When `body` is present, we don't attempt to read any file off disk, and put the contents of `body` into `CURLOPT_POSTFIELDS` without setting any other curl parameters like `CURLOPT_INFILE`.

I've changed `Http::send` to check for three cases:

- If `body` is set, use that as the raw POST request body.
- If `uploaded_data` is set, more or less do the same thing, but don't try to determine the size. This is more for legacy; this was used in a couple places in our code and others might depend on it. We put the value here into `CURLOPT_POSTFIELDS`.
- If `filename` is present, open and read the file off disk and upload it.

Added an `uploadWithBody` method to the `Attachments` class, contributed by Bryan Nobuhara @ Tumblr. Added a test for same.

/cc @dpawluk @rtatsumi @maximeprades 

### Todo
 - Add test for `uploadWithBody`

### References
 - Support ticket: https://support.zendesk.com/agent/tickets/916448

### Risks
 - None
There's no need to set `CURLOPT_HTTPHEADER` here. It gets set again by the `if`...`else` statement 10 lines later.