Enhancement: Exclude "callable" classes (and subclasses) from callable() calls
#### Code Sample

```python
>>> import pandas as pd
>>> from sympy.abc import x, y

>>> gg = pd.DataFrame([[1,2],[3,3],[4,5]], columns=[x,y])

>>> print(gg[[x]]) # works fine, but returns a DataFrame
   x
0  1
1  3
2  4
>>> print(gg[x])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "...\pandas\core\frame.py", line 1941, in __getitem__
    key = com._apply_if_callable(key, self)
  File "...\pandas\core\common.py", line 441, in _apply_if_callable
    return maybe_callable(obj, **kwargs)
  File "...sympy\core\symbol.py", line 158, in __call__
    return Function(self.name)(*args)
  File "...\sympy\core\function.py", line 761, in __new__
    obj = super(AppliedUndef, cls).__new__(cls, *args, **options)
  File "...\sympy\core\function.py", line 431, in __new__
    pr = max(cls._should_evalf(a) for a in result.args)
  File "...\sympy\core\function.py", line 431, in <genexpr>
    pr = max(cls._should_evalf(a) for a in result.args)
  File "...\sympy\core\function.py", line 449, in _should_evalf
    if arg.is_Float:
  File "...\pandas\core\generic.py", line 3081, in __getattr__
    return object.__getattribute__(self, name)
AttributeError: 'DataFrame' object has no attribute 'is_Float'
>>> gg[[x]].iloc[:,0] # super uncomfortable. but works?..
0    1
1    3
2    4
Name: x, dtype: int64
```
#### Problem description
Cannot correctly use types that are technically callable, but not with the "right" use as Pandas expects, in many places. This example happened to be with SymPy and indexing, not sure where else it might come up. 
For a bit more context on why I'm trying this, see: https://groups.google.com/forum/#!topic/sympy/CzOImly64RI

#### Expected Output
```python
>>> print(gg[x])
0    1
1    3
2    4
Name: x, dtype: int64
```

#### Potential resolution
Allow "registration" of types (and, possibly, specific functions) with Pandas to exclude them from callable(). 
Semi-abstract example:

```python
# define global Pandas "registry" with
def rcallable(arg): # 
    if registr.nonempty:
        if arg in registr.allowed: return True
        elif arg in registr.disallowed: return False
    return callable(arg)
registr.disallow(sympy.ManagedProperties) # Symbol is a subclass of this
print(gg[x])
```

Alternatively, to fix just this case, one can check for equality to indexes before checking if they're callable; that probably requires more code restructuring, and similar issues might arise in other places.

#### Output of ``pd.show_versions()``

<details>
INSTALLED VERSIONS
------------------
commit: None
python: 3.6.3.final.0
python-bits: 64
OS: Windows
OS-release: 10
machine: AMD64
processor: Intel64 Family 6 Model 94 Stepping 3, GenuineIntel
byteorder: little
LC_ALL: None
LANG: None
LOCALE: None.None

pandas: 0.22.0
pytest: 3.2.1
pip: 9.0.1
setuptools: 36.5.0.post20170921
Cython: 0.26.1
numpy: 1.13.3
scipy: 0.19.1
pyarrow: None
xarray: 0.10.0
IPython: 6.1.0
sphinx: 1.6.3
patsy: 0.4.1
dateutil: 2.6.1
pytz: 2017.2
blosc: None
bottleneck: 1.2.1
tables: 3.4.2
numexpr: 2.6.2
feather: None
matplotlib: 2.1.0
openpyxl: 2.4.8
xlrd: 1.1.0
xlwt: 1.3.0
xlsxwriter: 1.0.2
lxml: 4.1.0
bs4: 4.6.0
html5lib: 0.999999999
sqlalchemy: 1.1.13
pymysql: None
psycopg2: 2.7.3.2 (dt dec pq3 ext lo64)
jinja2: 2.9.6
s3fs: None
fastparquet: None
pandas_gbq: None
pandas_datareader: None
</details>
