ENH: intern some commonly used strings in umath module

Allows using the PyObject dictionary functions instead of the costly
C-string variants.

Make use of this in some of the ufunc subtype wrapper functions.

Improvement:

    a, b = np.arange(200.), np.arange(200.)
    %timeit np.add(a, b, out=a)
    1000000 loops, best of 3: 768 ns per loop

vs before:

    %timeit np.add(a, b, out=a)
    1000000 loops, best of 3: 1.03 µs per loop
ENH: skip redundant checking of subok keyword in _find_array_prepare

all currently existing callers only call this function if subok has
already been checked to be true, but keep the code to make clear it has
to be checked.
ENH: implement pairwise summation

pairwise summation has an average error of O(log(n)) instead of O(n) of
the regular summation.
It is implemented as summing pairs of small blocks of regulary summed
values in order to archive the same performance as the old sum.

An example of data which profits greatly is
d = np.ones(500000)
(d / 10.).sum() - d.size / 10.

An alternative to pairwise summation is kahan summation but in order to
have a low performance penalty one must unroll and vectorize it,
while pairwise summation has the same speed without any vectorization.
The better error bound of O(1) is negligible in many cases.
ENH: umath: simplify pairwise sum

Simple recursive implementation with unrolled base case. Also fixed
signed/unsigned issues by making all indices signed.

Added a unit test based on @juliantaylor's example.

Performance seems unchanged: still about a third faster than before.
ENH: fix stride issue and unroll 8 times to improve accuracy

Fix missing stride accounting in calling recursive function.
Unroll 8 times to improve accuracy and allowing vectorizing with avx
without changing summation order.
Add tests.
ENH: also use pairwise summation for half and complex types
BUG: fix NaT handling in _strided_to_strided_string_to_datetime

When converting an array of strings to datetime64, a "NaT" occurring
in the input would cause all subsequent values to be converted to NaT.
Merge pull request #4094 from cgwaldman/master

BUG: fix NaT handling in _strided_to_strided_string_to_datetime
Merge pull request #3685 from juliantaylor/pairwise

ENH: implement pairwise summation
Merge pull request #4058 from juliantaylor/intern-strings

ENH: intern some commonly used strings in umath module
BUG: fix incorrect type in binomial ditsributions.c

This caused slowness and wrong/potentially wrong results
when the binomial result is larger then a native C int.

Closes gh-3352
Merge pull request #4098 from seberg/issue-3352

BUG: fix incorrect type in binomial ditsributions.c
ENH: use PyObject_CallFunctionObjArgs in Generic*Function

ObjArgs is a few percent faster than the format version. This is
noticable in scalar operations.
Merge pull request #4106 from juliantaylor/objargs

ENH: use PyObject_CallFunctionObjArgs in Generic*Function