POSTing just data works; with data and files it fails

These work:

```
requests.post("http://httpbin.org/post", data={'a': 0})
requests.post("http://httpbin.org/post", data={'a': 0.0})
requests.post("http://httpbin.org/post", data={'a': 0}, files={'b': 'foo'})
```

However, this fails:

```
requests.post("http://httpbin.org/post", data={'a': 0.0}, files={'b': 'foo'})
```

```
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File ".../dev/lib/python2.7/site-packages/requests/api.py", line 87, in post
    return request('post', url, data=data, **kwargs)
  File ".../dev/lib/python2.7/site-packages/requests/safe_mode.py", line 37, in wrapped
    return function(method, url, **kwargs)
  File ".../dev/lib/python2.7/site-packages/requests/api.py", line 42, in request
    return s.request(method=method, url=url, **kwargs)
  File ".../dev/lib/python2.7/site-packages/requests/sessions.py", line 230, in request
    r.send(prefetch=prefetch)
  File ".../dev/lib/python2.7/site-packages/requests/models.py", line 505, in send
    (body, content_type) = self._encode_files(self.files)
  File ".../dev/lib/python2.7/site-packages/requests/models.py", line 364, in _encode_files
    (body, content_type) = encode_multipart_formdata(fields)
  File ".../dev/lib/python2.7/site-packages/requests/packages/urllib3/filepost.py", line 80, in encode_multipart_formdata
    body.write(data)
TypeError: 'float' does not have the buffer interface
```

`encode_multipart_formdata` expect the keys of the data dict to be buffer-like objects or ints (a special case), whereas `urlencode` puts things through str. In the hindsight I'm not sure if I should have expected this to work, but I was pretty surprised when I encountered this.


ints shouldn't be working, I just left that in as a special case for backwards compatibility with much earlier versions of urllib3. You shouldn't be passing arbitrary objects as values, just string/buffer-like things. Perhaps removing int support and/or clearer docs would help?


The int support confused me until I properly looked at the docs/source and I think urllib3 docs on this are fine. In the requests docs, however, I see no mention on the allowed types in the data dict. Maybe there should be something? (Or maybe requests should convert data values to strings before passing them to encode_multipart_formdata, as non-string values work with urlencode?)


There is a problem when sending lists in data with files as well

``` python
import requests

files = {'robots.txt' : open('robots.txt', 'rb') }

r = requests.post("http://postbin.heroku.com/f8012248",
     auth=("api", 'key-secret'),
     files = files,
     data={
         "from": 'roman@test.com',
         "to": ['roman@test.com', 'someone@gmail.com'],
         "subject": 'sending from console, file attached',
         "html": '<p>that my full body</p>' * 10
         }
     )
```

```
Traceback (most recent call last):
  File "<stdin>", line 8, in <module>
  File "/home/roman/virt_env/swan_dev/local/lib/python2.7/site-packages/requests/api.py", line 87, in post
    return request('post', url, data=data, **kwargs)
  File "/home/roman/virt_env/swan_dev/local/lib/python2.7/site-packages/requests/safe_mode.py", line 37, in wrapped
    return function(method, url, **kwargs)
  File "/home/roman/virt_env/swan_dev/local/lib/python2.7/site-packages/requests/api.py", line 42, in request
    return s.request(method=method, url=url, **kwargs)
  File "/home/roman/virt_env/swan_dev/local/lib/python2.7/site-packages/requests/sessions.py", line 230, in request
    r.send(prefetch=prefetch)
  File "/home/roman/virt_env/swan_dev/local/lib/python2.7/site-packages/requests/models.py", line 499, in send
    (body, content_type) = self._encode_files(self.files)
  File "/home/roman/virt_env/swan_dev/local/lib/python2.7/site-packages/requests/models.py", line 358, in _encode_files
    (body, content_type) = encode_multipart_formdata(fields)
  File "/home/roman/virt_env/swan_dev/local/lib/python2.7/site-packages/requests/packages/urllib3/filepost.py", line 83, in encode_multipart_formdata
    body.write(data)
TypeError: 'list' does not have the buffer interface

```

which works if "to" is just a string or without "files" parameter

P.S. 
actually it works with tuple : "to": ('roman@test.com', 'someone@gmail.com'),