ENH: add `multi_dot`: dot with multiple arguments.

`np.linalg.multi_dot` computes the dot product of two or more arrays in
a single function call, while automatically selecting the fastest evaluation
order.

The algorithm for selecting the fastest evaluation order uses dynamic
programming and closely follows:

    Cormen, "Introduction to Algorithms", Chapter 15.2, p. 370-378
DEP: Replaced arr->nd with PyArray_NDIM in fortranobject.c
DEP: replaced arr->nd with PyArray_NDIM in C code generation scripts
DEP: replaced arr->data with PyArray_DATA
DEP: replaced arr->dimensions with PyArray_DIMS(arr) or PyArray_DIM(arr,i)
DEP: Replaced arr->descr, arr->flags and arr->base with the PyArray_* functions
DEP: Using PyArray_SIZE and PyArray_TYPE instead of PyArray_DESCR()->elsize etc
DEP: Using the internal PyArrayObject_fields API for the swap_arrays and dump_attrs functions
DEP: Replaced NPY_[F,C]ARRAY with NPY_ARRAY_[F,C]ARRAY
DEP: Corrected some type errors that appear when enabling NPY_NO_DEPRECATED_API
DEP: Replace NPY_CONTIGUOUS with NPY_ARRAY_C_CONTIGUOUS
DEP: removed deprecated API calls from test code (wrapmodule.c)
DEP: #declaring NPY_NO_DEPRECATED_API in fortranobject.h
Update docstring for multivariate_normal().

The change is to make a stronger statement that the covariance matrix must
be positive-semidefinite and that if it is not, then the results are not
guaranteed across NumPy versions.
Merge pull request #5266 from chebee7i/multivariate_normal

Possible regression in `multivariate_normal()`
Merge pull request #5270 from chatcannon/f2py-remove-deprecated-api

Stop F2Py from using the deprecated numpy API
TST: Fix ImportError in runtests.py (fixes #5273)

In numpy/testing/__init__.py, import Tester before importing numpy core
Merge pull request #5274 from chatcannon/fix-testing-cyclic-import

TST: Fix ImportError in runtests.py (fixes #5273)
Merge pull request #4977 from sotte/mdot

ENH: add `mdot`: fast dot with multiple arguments.