ENH: Support for Postgres NaN data type
The below example code is a variant of [this comment](https://bitbucket.org/zzzeek/sqlalchemy/issues/977/float-values-infinity-infinity-and-nan#comment-18706187). The problem is that pandas can't infer the type when the columns are all null. I would like to be able to use Postgres' NaN value if possible, but seems that pandas passes `None` to SQLAlchemy instead of `float('NaN')`. I would rather not cast the column's dtype to numeric after-the-fact. From previous link I know it's possible to make Postgres NaN values from SQLAlchemy. Is it possible pandas could support this?

```
tmaloney@vm-data-1:/var/tmp$ sudo -u postgres psql -c "drop database test;"
DROP DATABASE
tmaloney@vm-data-1:/var/tmp$ cat test.sql
create database test owner tmaloney;
tmaloney@vm-data-1:/var/tmp$ sudo -u postgres psql < /var/tmp/test.sql 
CREATE DATABASE
tmaloney@vm-data-1:/var/tmp$ cat test2.py
#!/usr/bin/env python
'''
Creates a test python db to play with
'''
import sqlalchemy as sa
import pandas as pd
from pandas.util.testing import assert_frame_equal

CON_URL = 'postgres://tmaloney:secret@localhost/test'

db = sa.create_engine(CON_URL)
meta = sa.MetaData()


test_table = sa.Table(
    'test_float', meta,
    # A table contains design id and blocks
    sa.Column('id', sa.Integer, primary_key=True),
    sa.Column('float_val', sa.Float())
)

meta.drop_all(db)
meta.create_all(db)

data = [
    {'float_val': float('nan')},
    {'float_val': float('NaN')},
]
df = pd.DataFrame(data)
engine = sa.create_engine(CON_URL)
df.to_sql('test_float', engine, if_exists='append', index=False)

returned_df = pd.read_sql_table('test_float', engine)
assert_frame_equal(df, returned_df[['float_val']])

returned_df = pd.read_sql('select * from test_float', engine)
assert_frame_equal(df, returned_df[['float_val']])
tmaloney@vm-data-1:/var/tmp$ python test2.py
Traceback (most recent call last):
  File "test2.py", line 37, in <module>
    assert_frame_equal(df, returned_df[['float_val']])
  File "/usr/local/lib/python2.7/dist-packages/pandas/util/testing.py", line 746, in assert_frame_equal
    check_names=check_names)
  File "/usr/local/lib/python2.7/dist-packages/pandas/util/testing.py", line 675, in assert_series_equal
    assert_attr_equal('dtype', left, right)
  File "/usr/local/lib/python2.7/dist-packages/pandas/util/testing.py", line 552, in assert_attr_equal
    assert_equal(left_attr,right_attr,"attr is not equal [{0}]" .format(attr))
  File "/usr/local/lib/python2.7/dist-packages/pandas/util/testing.py", line 533, in assert_equal
    assert a == b, "%s: %r != %r" % (msg.format(a,b), a, b)
AssertionError: attr is not equal [dtype]: dtype('float64') != dtype('O')
```

The first assertion works, the second one does not.
