Empty/whitespace-only values in requests.post data

Either one or two issues here, but probably related (please let me know if you'd rather have them raised separately):
1. Entries in requests.post data that have empty values are not transmitted
2. Entries in requests.post data that have whitespace-only values are not transmitted when entered as a json string, but are when entered as a dictionary

See the following demonstration code:

```
#!/usr/bin/env python
from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
from threading import Thread
import cgi
import requests

class Handler(BaseHTTPRequestHandler):
  def do_POST(self):
    print 'Got a post request'
    self.send_response(200)
    self.send_header('Content-type', 'application/json')
    self.end_headers()
    form = cgi.FieldStorage(
      fp=self.rfile, 
      headers=self.headers,
      environ={
        'REQUEST_METHOD':'POST',
        'CONTENT_TYPE':'application/json',
      })
    print 'Data is:' + str(form)
    for key in form:
      print 'Key: ' + key + ', Value: ' + form[key].value
    return

if __name__ == '__main__':
  server_address=('',8080)
  httpd = HTTPServer(server_address, Handler)
  Thread(target=httpd.serve_forever).start()

  requests.post('http://localhost:8080', data='{"key1":""}')
  requests.post('http://localhost:8080', data={'key2':''})
  requests.post('http://localhost:8080', data='{"key3":" "}')
  requests.post('http://localhost:8080', data={'key4':' '})

  httpd.shutdown()
```

Expected output:

```
Got a post request
127.0.0.1 - - [30/Oct/2016 17:24:20] "POST / HTTP/1.1" 200 -
Data is:FieldStorage(None, None, [MiniFieldStorage('key1', '')])
Got a post request
127.0.0.1 - - [30/Oct/2016 17:24:20] "POST / HTTP/1.1" 200 -
Data is:FieldStorage(None, None, [MiniFieldStorage('key2', '')])
Got a post request
127.0.0.1 - - [30/Oct/2016 17:24:20] "POST / HTTP/1.1" 200 -
Data is:FieldStorage(None, None, [MiniFieldStorage('key3', ' ')])
Got a post request
127.0.0.1 - - [30/Oct/2016 17:24:20] "POST / HTTP/1.1" 200 -
Data is:FieldStorage(None, None, [MiniFieldStorage('key4', ' ')])
Key: key4, Value:
```

Actual output:

```
Got a post request
127.0.0.1 - - [30/Oct/2016 17:24:20] "POST / HTTP/1.1" 200 -
Data is:FieldStorage(None, None, [])
Got a post request
127.0.0.1 - - [30/Oct/2016 17:24:20] "POST / HTTP/1.1" 200 -
Data is:FieldStorage(None, None, [])
Got a post request
127.0.0.1 - - [30/Oct/2016 17:24:20] "POST / HTTP/1.1" 200 -
Data is:FieldStorage(None, None, [])
Got a post request
127.0.0.1 - - [30/Oct/2016 17:24:20] "POST / HTTP/1.1" 200 -
Data is:FieldStorage(None, None, [MiniFieldStorage('key4', ' ')])
Key: key4, Value:
```


When you pass a string the `data` kwarg, we don't process it at all: we just send it on. That means that, for at least key1 and key3, the error in behaviour is with your server.

Now, I suspect that's because you aren't sending a JSON content-type header, which means that the remote server has no idea what the content is. So let's consider only key2, which is the only part that is even slightly likely to be surprising. If I change your code to this:

``` python
r = requests.post('http://http2bin.org/post', data={'key2': ''})
print(r.json()["form"])
```

You'll see that http2bin has seen the empty field value. A wireshark trace of that request shows that Requests sent this:

``` python
POST /post HTTP/1.1
Host: http2bin.org
Connection: keep-alive
Accept-Encoding: gzip, deflate
Accept: */*
User-Agent: python-requests/2.11.1
Content-Length: 5
Content-Type: application/x-www-form-urlencoded

key2=
```

So this suggests that all of the observed problems you are seeing are to do with your _server_, and nothing to do with Requests.


Thanks!