BUG: fix handling of negative strides in npy_memchr

the new code did not account for them at all, add the old loops back but
keep the stride 1 optimization for sparse masks.
MAINT: remove trailing zero count path in npy_memchr

its only actually faster than just running through the trailing bytewise
loop if the needle is in the last byte.
BUG: fix broken UPLO of eigh in python3

UPLO was cast to bytes and compared to a string which is always false in
python3.
closes gh-3977
MAINT: runtests: enable generation of C code coverage info via gcov
Merge pull request #3969 from juliantaylor/memchr-bug2

BUG: fix handling of negative strides in npy_memchr
BUG: reject invalid UPLO with ValueError in eigh/eigvalsh

to prevent unintentional use of wrong function. Restores 1.7 behavior.
Merge pull request #3979 from pv/gcov

MAINT: runtests: enable generation of C code coverage info via gcov
Merge pull request #3978 from juliantaylor/py3-eigh-bug

BUG: fix broken UPLO of eigh in python3