ENH: string sql query passed to read_sql_query should be wrapped in sqlalchemy.text when using an sqlalchemy engine
#### Code Sample, copy-pastable if proper database credentials are used

```python
import pandas as pd
from sqlalchemy import create_engine, text

# change the connection string as required
engine = create_engine('postgresql+psycopg2://hal@localhost/hal')
engine.execute('CREATE TABLE test_orders (id SERIAL PRIMARY KEY, customer_type VARCHAR)')
engine.execute("INSERT INTO test_orders (customer_type) VALUES ('urban'), ('urban'), ('rural')")

statement = "SELECT COUNT(*) FROM test_orders WHERE customer_type LIKE 'urban%'"
statement2 = "SELECT COUNT(*) FROM test_orders WHERE customer_type LIKE :c"

# does not work, exception shown in the expected output section
try: 
    df = pd.read_sql_query(statement, engine)
except Exception as e:
    print(str(type(e) + ': ' + str(e))
    

# does not work, exception shown in the expected output section
try: 
    df = pd.read_sql_query(statement, engine, params={'c': 'urban%'})
except Exception as e:
    print(str(e))

# works 
try: 
  df = pd.read_sql_query(text(statement), engine)
  df2 = pd.read_sql_query(text(statement), engine, params={'c': 'urban%'})
except Exception as e:
  print(str(e))
  
```
#### Problem description

Using plain-text sql with sqlalchemy engines don't work
* if the `%` character is present in the query 
* with the argument `params`. 

The queries work as expected if the sql is wrapped with `sqlalchemy.text`. Also, wrapping a plain-text query with `sqlalchemy.text` should not have any effect on the output or performance of the query. 

However that is not an intuitive behavior for many analysts, who don't know what sqlalchemy is or what ORMs are in general, or that different database drivers may use `%` to format parameters.

Here's a stackoverflow Q-A on the same sqlalchemy usage issue:
http://stackoverflow.com/questions/8657508/strange-sqlalchemy-error-message-typeerror-dict-object-does-not-support-inde

We can prevent this error by wrapping the plain-text sql by `text` if an sqlalchemy engine is passed as the `con` argument to the function.

Something like this:

```python
def read_sql_query(sql, con, index_col=None, coerce_float=True, params=None, parse_dates=None, chunksize=None):
    if isinstance(sql, string) and isinstance(con, Engine):
        sql = text(sql)
    ...
```

I'd be happy to submit a PR for this code change + tests & documentation updates if the maintainers agree this to be an acceptable resolution.

#### Expected Output
```
# output from the first try-except block
<class 'TypeError'>: 'dict' object does not support indexing

# output from the second try-except block
(psycopg2.ProgrammingError) syntax error at or near ":"
LINE 1: ...ELECT COUNT(*) FROM test_orders WHERE customer_type LIKE :c1
                                                                    ^
 [SQL: 'SELECT COUNT(*) FROM test_orders WHERE customer_type LIKE :c1'] [parameters: {'c1': 'urban%'}]
```
#### Output of ``pd.show_versions()``

<details>

INSTALLED VERSIONS
------------------
commit: None
python: 3.6.0.final.0
python-bits: 64
OS: Darwin
OS-release: 15.6.0
machine: x86_64
processor: i386
byteorder: little
LC_ALL: None
LANG: en_CA.UTF-8
LOCALE: en_CA.UTF-8

pandas: 0.19.2
nose: None
pip: 9.0.1
setuptools: 28.8.0
Cython: 0.25.2
numpy: 1.12.0
scipy: 0.18.1
statsmodels: 0.6.1
xarray: None
IPython: 5.1.0
sphinx: None
patsy: 0.4.1
dateutil: 2.6.0
pytz: 2016.10
blosc: None
bottleneck: None
tables: None
numexpr: 2.6.1
matplotlib: 2.0.0
openpyxl: None
xlrd: None
xlwt: None
xlsxwriter: None
lxml: None
bs4: None
html5lib: 0.999999999
httplib2: None
apiclient: None
sqlalchemy: 1.1.5
pymysql: 0.7.9.None
psycopg2: 2.6.2 (dt dec pq3 ext lo64)
jinja2: 2.9.4
boto: None
pandas_datareader: None

</details>
