Using header with a float value in a request results in error on Python 3.

I have an example below. 

This seems to be a bug in `http.client` as it doesn't convert floats to string representation. But as a workaround we can may be explicitly convert any floats in the header to string in [`urlopen`](https://github.com/kennethreitz/requests/blob/master/requests/packages/urllib3/connectionpool.py#L421)?

```
$ ipython                
Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
Type "copyright", "credits" or "license" for more information.

IPython 3.2.0 -- An enhanced Interactive Python.
?         -> Introduction and overview of IPython's features.
%quickref -> Quick reference.
help      -> Python's own help system.
object?   -> Details about 'object', use 'object??' for extra details.

In [1]: import requests

In [2]: requests.__version__
Out[2]: '2.7.0'

In [3]: url = "http://sunu.in"

In [4]: headers = {'x-wait': 0.2}

In [5]: requests.get(url, headers=headers)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-5-951b2e0c9a38> in <module>()
----> 1 requests.get(url, headers=headers)

/home/sunu/gsoc/splash/env3/lib/python3.4/site-packages/requests/api.py in get(url, params, **kwargs)
     67 
     68     kwargs.setdefault('allow_redirects', True)
---> 69     return request('get', url, params=params, **kwargs)
     70 
     71 

/home/sunu/gsoc/splash/env3/lib/python3.4/site-packages/requests/api.py in request(method, url, **kwargs)
     48 
     49     session = sessions.Session()
---> 50     response = session.request(method=method, url=url, **kwargs)
     51     # By explicitly closing the session, we avoid leaving sockets open which
     52     # can trigger a ResourceWarning in some cases, and look like a memory leak

/home/sunu/gsoc/splash/env3/lib/python3.4/site-packages/requests/sessions.py in request(self, method, url, params, data, headers, cookies, files, auth, timeout, allow_redirects, proxies, hooks, stream, verify, cert, json)
    463         }
    464         send_kwargs.update(settings)
--> 465         resp = self.send(prep, **send_kwargs)
    466 
    467         return resp

/home/sunu/gsoc/splash/env3/lib/python3.4/site-packages/requests/sessions.py in send(self, request, **kwargs)
    571 
    572         # Send the request
--> 573         r = adapter.send(request, **kwargs)
    574 
    575         # Total elapsed time of the request (approximately)

/home/sunu/gsoc/splash/env3/lib/python3.4/site-packages/requests/adapters.py in send(self, request, stream, timeout, verify, cert, proxies)
    368                     decode_content=False,
    369                     retries=self.max_retries,
--> 370                     timeout=timeout
    371                 )
    372 

/home/sunu/gsoc/splash/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py in urlopen(self, method, url, body, headers, retries, redirect, assert_same_host, timeout, pool_timeout, release_conn, **response_kw)
    546             httplib_response = self._make_request(conn, method, url,
    547                                                   timeout=timeout_obj,
--> 548                                                   body=body, headers=headers)
    549 
    550             # If we're going to release the connection in ``finally:``, then

/home/sunu/gsoc/splash/env3/lib/python3.4/site-packages/requests/packages/urllib3/connectionpool.py in _make_request(self, conn, method, url, timeout, **httplib_request_kw)
    347         # conn.request() calls httplib.*.request, not the method in
    348         # urllib3.request. It also calls makefile (recv) on the socket.
--> 349         conn.request(method, url, **httplib_request_kw)
    350 
    351         # Reset the timeout for the recv() on the socket

/usr/lib/python3.4/http/client.py in request(self, method, url, body, headers)
   1063     def request(self, method, url, body=None, headers={}):
   1064         """Send a complete request to the server."""
-> 1065         self._send_request(method, url, body, headers)
   1066 
   1067     def _set_content_length(self, body):

/usr/lib/python3.4/http/client.py in _send_request(self, method, url, body, headers)
   1096             self._set_content_length(body)
   1097         for hdr, value in headers.items():
-> 1098             self.putheader(hdr, value)
   1099         if isinstance(body, str):
   1100             # RFC 2616 Section 3.7.1 says that text default has a

/usr/lib/python3.4/http/client.py in putheader(self, header, *values)
   1042             elif isinstance(one_value, int):
   1043                 values[i] = str(one_value).encode('ascii')
-> 1044         value = b'\r\n\t'.join(values)
   1045         header = header + b': ' + value
   1046         self._output(header)

TypeError: sequence item 0: expected bytes, bytearray, or an object with the buffer interface, float found
```


This feels like a reasonable feature request to me, I have no objections to casting non-string values to strings.


@Lukasa Great! I'll submit a PR. Thanks for the quick response :)


Actually we've already rejected similar bugs and pull requests in the past: https://github.com/kennethreitz/requests/issues/986

I'm inclined to agree with those decisions. Headers should fundamentally always be strings provided by the user. The implementation of `str(some_float)` can vary from implementation to implementation so while `str(0.2)` may produce `'0.2'` it probably wouldn't with pypy.js or some other implementation of Python.


Hmm .. I guess this makes sense. I'll handle this in the application level then. 
Closing the issue. Thanks for your time and input @Lukasa and @sigmavirus24 :)