Allow post requests with http body

These changes allow to do something like:

```
result = self.client.end.point(http_method='post', http_body={
    'name': 'Some Random Name'
})
```

The `http_body` value will be encoded as JSON and sent as the request body.
I'm slightly concerned that these internal (non-URL) arguments are potentially conflicting with genuine arguments so maybe these should be isolated into a single `_options` or prefixed with `_`.