ENH: core: make unpickling with encoding='bytes' work

Make dtype.__setstate__ accept endian either as a byte string or unicode.

Also fix a missing error return introduced in c3551579, apparently
mistake.
BUG: core: ensure unpickled dtype fields and names have correct types + coerce on Py3

That 'names' is a tuple and 'fields' a dict (when present) is assumed in
most of the code base, so check them during unpickling.

Also add coercion from bytes using ASCII codec on Python 3.  This is
never triggered in the "usual" case of loading Py3-generated pickles on
Py3, but can occur if loading Py2 generated pickles with
pickle.load(f, encoding='bytes'), which sometimes is the only working
option.

The ASCII codec is probably the safest choice and likely covers most use
cases.
Merge pull request #4888 from pv/fix-bytes-encoding-unpickle

ENH: core: make unpickling with encoding='bytes' work