DOC: Improved doc for boolean array indexing
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.
DOC: further improvements for boolean array indexing doc
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.
DOC: further tweaks to boolean indexing doc to improve clarity
Merge pull request #4066 from garyo/master

DOC: Improved doc for boolean array indexing
BUG: Fix np.insert with negative axis.

In some cases a negative axis argument to np.insert would result
in wrong behaviour due to np.rollaxis, add modulo operation to
avoid this (an error is still raised due to arr.shape[axis]).

Closes gh-3494
TST: add test for negative axis values in np.insert.
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.
Merge pull request #4089 from seberg/issue-3494

BUG: Fix negative axis insert (issue 3494)
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