BUG: Add type promotion support for eval() expressions with many properties

This commit modifies the call to numpy.result_type to get around the
NPY_MAXARGS limit, which at the moment is 32.  Instead of passing a
generator of all types involved in an expression, the type promotion
is done on a pair-wise basis with a call to reduce.

This fixes bugs for code such as the following:

    from numpy.random import randn
    from pandas import DataFrame

    d = DataFrame(randn(10, 2), columns=list('ab'))

    # Evaluates fine
    print(d.eval('*'.join(['a'] * 32)))

    # Fails to evaluate due to NumPy argument limits
    print(d.eval('*'.join(['a'] * 33)))
Merge pull request #6205 from havoc-io/master

BUG: Add type promotion support for eval() expressions with many properties
Merge pull request #6285 from jreback/cython_cache

BLD: re cythonize files only if we have changed then
PERF: enhance tseries getitem indexing

PERF: micro optimzations in inference

API/CLN: core.internals.apply now only takes kwargs; makes code a bit simpler

CLN: wrap core/common/isnull into more direct Block.isnull

PERF: fast path series block operations