Fixed sending objects with no .read and with length

This is a bug fix, because sending such an object currently will cause an exception:
```python
  File "test.py", line 81, in client
    r = session.post(url, data=DataWithoutLength(a)).text
  File "/Users/icebreak/source/requestssux/requests/requests/sessions.py", line 572, in post
    return self.request('POST', url, data=data, json=json, **kwargs)
  File "/Users/icebreak/source/requestssux/requests/requests/sessions.py", line 524, in request
    resp = self.send(prep, **send_kwargs)
  File "/Users/icebreak/source/requestssux/requests/requests/sessions.py", line 637, in send
    r = adapter.send(request, **kwargs)
  File "/Users/icebreak/source/requestssux/requests/requests/adapters.py", line 449, in send
    timeout=timeout
  File "/Users/icebreak/source/requestssux/.venv2/lib/python2.7/site-packages/urllib3/connectionpool.py", line 600, in urlopen
    chunked=chunked)
  File "/Users/icebreak/source/requestssux/.venv2/lib/python2.7/site-packages/urllib3/connectionpool.py", line 354, in _make_request
    conn.request(method, url, **httplib_request_kw)
  File "/Users/icebreak/miniconda2/lib/python2.7/httplib.py", line 1042, in request
    self._send_request(method, url, body, headers)
  File "/Users/icebreak/miniconda2/lib/python2.7/httplib.py", line 1082, in _send_request
    self.endheaders(body)
  File "/Users/icebreak/miniconda2/lib/python2.7/httplib.py", line 1038, in endheaders
    self._send_output(message_body)
  File "/Users/icebreak/miniconda2/lib/python2.7/httplib.py", line 886, in _send_output
    self.send(message_body)
  File "/Users/icebreak/miniconda2/lib/python2.7/httplib.py", line 858, in send
    self.sock.sendall(data)
  File "/Users/icebreak/miniconda2/lib/python2.7/socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
TypeError: sendall() argument 1 must be convertible to a buffer, not DataWithoutLength
```
The patch makes sure that it will only fix this specific instance.

I believe the correct, backwards-compatible, and feature-intended behaviour is to raise a different exception that we can not and will not handle the body

Hi @tzickel,

If you read the [documentation](http://docs.python-requests.org/en/master/user/quickstart/#more-complicated-post-requests) and the docstrings for the post method, you can see we support the following:
> :param data: (optional) Dictionary, list of tuples, bytes, or file-like object to send in the body of the :class:`Request`.

You can find the definition of file-like [here](https://docs.python.org/3/glossary.html#term-file-object).

We will have the same problem on most of our interfaces when supplied objects not meeting the expected input criteria. We could also implement a custom `Header` class, but if it doesn't conform to the mapping interface, it's unlikely to work as expected.

I believe you'll find if you replace your test case with the minimum of implementing `IOBase` from the `io` module that it fixes the error you're encountering. While @sigmavirus24 is right that we could implement exception handling, I think it's a bit of a slippery slope to start adding exact type checking to every API entry. 


This is the test code I used:
<details>

```python
class TestIteratorWithLength(io.IOBase):
    def __init__(self, data):
        self.data = data.encode()
        self.length = len(self.data)
        self.itersize = 2**20

    def __len__(self):
        return self.length

    def __iter__(self):
        return self

    def __next__(self):
        if self.data:
            ret = self.data[:self.itersize]
            self.data = self.data[self.itersize:]
            return ret
        else:
            raise StopIteration()

    next = __next__

test = TestIteratorWithLength('test')

r = requests.post('https://httpbin.org/post', data=test)
print(r.json())
```

</details>


@nateprewitt The issue with file object is described here:
https://github.com/requests/requests/issues/4837
mainly, it's a performance hog both I/o and memory allocation, since it will call .read with 8192 blocks instead of iterating and getting how much data it can (currently i'm streaming the data in 64MB chunks....).

Also seems pretty arbitrary to support \_\_iter__ without length, but not support it with...

Hmm.... this is an issue only in python2 (and maybe old python 3 versions)... newer python http handling can bypass this requests limitation, I still think requests should act the same...

# [Codecov](https://codecov.io/gh/requests/requests/pull/4838?src=pr&el=h1) Report
> Merging [#4838](https://codecov.io/gh/requests/requests/pull/4838?src=pr&el=desc) into [master](https://codecov.io/gh/requests/requests/commit/d2962f1d55a211a4606d8387b6333de7a21e630d?src=pr&el=desc) will **increase** coverage by `0.16%`.
> The diff coverage is `93.33%`.

[![Impacted file tree graph](https://codecov.io/gh/requests/requests/pull/4838/graphs/tree.svg?width=650&token=mZGswIiXLa&height=150&src=pr)](https://codecov.io/gh/requests/requests/pull/4838?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master    #4838      +/-   ##
==========================================
+ Coverage   66.79%   66.96%   +0.16%     
==========================================
  Files          15       15              
  Lines        1572     1580       +8     
==========================================
+ Hits         1050     1058       +8     
  Misses        522      522
```


| [Impacted Files](https://codecov.io/gh/requests/requests/pull/4838?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [requests/adapters.py](https://codecov.io/gh/requests/requests/pull/4838/diff?src=pr&el=tree#diff-cmVxdWVzdHMvYWRhcHRlcnMucHk=) | `71.3% <93.33%> (+1.03%)` | :arrow_up: |

------

[Continue to review full report at Codecov](https://codecov.io/gh/requests/requests/pull/4838?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/requests/requests/pull/4838?src=pr&el=footer). Last update [d2962f1...828d179](https://codecov.io/gh/requests/requests/pull/4838?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).


Closing due to inactivity and label