BUG: fix broken operand initialization for einsum.

Closes #4528.
BUG: fix uninitialized use of size 1 reductions

Size 1 reductions do not intiialize the iterator fully as normal
reductions which triggers uninitialized use in NpyIter_IsFirstVisit.
To fix this check the size of the iterator and return true if it only
has size 1.
DOC: Link convolve with polymul

Matlab uses `conv` for both convolution and polynomial multiplication. Clarifying that numpy has functions for each.
BUG: nditer: Initialize buffer reduce pos

The FirstVisit function uses this, but when the reduction is
over a single element it isn't considered a reduction. This is
fine, however the reduce pos must still be initialized to 0 in
that case. Also changes the check order so that it is not
necessary to initialize the outerstrides as well.

See also gh-4134, and gh-4535.
BUG:change formatting of assert_array_almost_equal

assert_array_almost_equal now prints the number of digits that were
being compared in the test instead of always printing 8 (the default
for array_repr). This would lead to uninformattive error messages.

Fixes #2367
TST: Add tests for build_err_msg
ENH: Add check for ndarray/scalar in build_err_msg

This check is needed now that build_err_msg takes a precision argument,
which is only relevant if the things being compared are ndarrays.
TST: Add exception message formatting tests

assert_approx_equal & assert_almost_equal make internal use of
build_err_msg so a few tests have been added to check that the errors
are formatted correctly.
BUG: Fix non-compatible py3 property