ENH: use dot (BLAS!) in linalg.norm
DOC: Improved doc for boolean array indexing
BUG/ENH: blasdot: make *dot calls 64-bit safe

BLAS uses int for all its size types, so the size is going to be
silently truncated on platforms where sizeof npy_intp > sizeof int,
i.e. on modern 64-bit platforms. In this case, we do a dot product
in reasonably-sized chunks and add the result ourselves.

On platforms where sizeof(int) == sizeof(npy_intp), i.e. typical
32-bit platforms, it's up to the compiler to optimize the loop away.

Also tried to make the code more readable, replaced int by npy_intp
in a few places and removed useless register declarations (modern
compilers ignore those).
ENH: dotblas: re-route all cblas_?dot calls to chunked versions

Also factored out and simplified NumPy->BLAS stride conversion.
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.
BUG: Error checks for the dtype shape.

Also creates a clean tuple for the shape tuple, instead of
passing potentially mutable objects through.

Closes gh-4009
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