Allow file-like objects in HTTPClient.request

Instead of always passing string objects to HTTPClient.request, allow passing of file-like objects with a 'read' attribute
Avoids having to do some unnecessary sidestepping in gevent.socket.sendall (which in turn just calls gevent.socket.send anyway)