Request with single form parameter evaluating to `None` duplicates `Host` headers

Somehow, performing a `POST` request where the body is encoded as `application/x-www-form-urlencoded` with the body containing a single field which evaluates to `None` (a la `{'param': None}`) submits a request containing *two* `Host` headers, one of which is the provided override and the other which is built from the `netloc` of the request URL.

## Expected Result

```
POST / HTTP/1.1
Host: localhost
User-Agent: python-requests/2.19.1
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Content-Length: 0
Content-Type: application/x-www-form-urlencoded


```

## Actual Result

```
POST / HTTP/1.1
Host: localhost:4000
User-Agent: python-requests/2.19.1
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
Host: localhost
Content-Type: application/x-www-form-urlencoded

0
```

## Reproduction Steps

Open up a `netcat` session to view the request content:
```sh
nc -l 127.0.0.1 4000
```

Make the request:
```python
import requests
requests.post('http://localhost:4000/test', headers={'Host': 'localhost'}, data={'some_param': None})
```

## System Information

    $ python -m requests.help

```
{
  "chardet": {
    "version": "3.0.4"
  },
  "cryptography": {
    "version": ""
  },
  "idna": {
    "version": "2.7"
  },
  "implementation": {
    "name": "CPython",
    "version": "3.6.4"
  },
  "platform": {
    "release": "17.6.0",
    "system": "Darwin"
  },
  "pyOpenSSL": {
    "openssl_version": "",
    "version": null
  },
  "requests": {
    "version": "2.19.1"
  },
  "system_ssl": {
    "version": "100020bf"
  },
  "urllib3": {
    "version": "1.23"
  },
  "using_pyopenssl": false
}
```

We have also been able to reproduce this on Ubuntu machines using `requests==2.13.0` and `python==2.7.6`:

```
### Request
Python 2.7.6 (default, Oct 26 2016, 20:30:19) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> requests.__version__
'2.13.0'
>>> requests.post('http://localhost:4000/', headers={'Host': 'localhost'}, data={'param': None})

### Response
POST / HTTP/1.1
Host: localhost:4000
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: python-requests/2.13.0
Host: localhost
Content-Type: application/x-www-form-urlencoded

0
```

Problem is that when you put `{'some_value': None}` in the data parameter, the body of the prepared request (made by the request library from your input data) is filled with `''` (empty string) and also not 'ContentLength' pair is added in its header dictionary:

| How you fill your post data | `prepared_req.body` | `'Content-Length' in prepared_req.headers` |
| ---- | --------------- | ------------ |
| `data={'some_parameter': None}` | `''` | `False` |
| `data={'foo': 'bar'}` | `'foo=bar'` |  `True` (7) |
| `data={}` | `None` | `True` (0) |

So, because `Content-Length` is not set and body is not Empty (is `''` but is not `None`) [this line of code](https://github.com/requests/requests/blob/v2.19.1/requests/adapters.py#L416) understand that your request is a chunked request, and instead of use the public and friendly interface of urllib3 ([here](https://github.com/requests/requests/blob/v2.19.1/requests/adapters.py#L435)) its get a "low level" connection ([here](https://github.com/requests/requests/blob/v2.19.1/requests/adapters.py#L453)) and deals with the bare [httplib](https://github.com/python/cpython/blob/2.7/Lib/httplib.py). Problem with this? Well, the library only allows to "append headers" but no to "add or replace in case that exists". So when requestlib does [this](https://github.com/requests/requests/blob/v2.19.1/requests/adapters.py#L461) it is actually appending the 'Host' header that you specify but without removing the existing one (previously added by `netloc` ([here](https://github.com/python/cpython/blob/2.7/Lib/httplib.py#L961)).

So.. solution to this? I think is to change prepared request behavior in order to fill body with None and adding the 'Content-Lenght' header with a 0 value. I can create a pull request, just want to know if this would be the expected behavior

(note that for an actual chunked request, we'll be still not able to override headers)

@jion Thanks for taking a look! Let me talk with my team and see what they think the expected request would be, or if they'd rather work around it downstream instead.

In an effort to clean up the issue tracker to only have issues that are still relevant to the project we've done a quick pass and decided this issue may no longer be relevant for a variety of potential reasons, including:

* Applies to a much older version, unclear whether the issue still applies.
* Change requires a backwards incompatible release and it's unclear if the benefits are worth the migration effort from the community.
* There isn't a clear demand from the community on the change landing in Requests.

If you think the issue should remain open, please comment so below or open a new issue and link back to the original issue. Again, thank you for opening the issue and for the discussion, it's much appreciated.