BUG: astype is broken for structured arrays with different byte orders

The offending commit is c53b0e4, which introduced two regressions:
- using `astype` to cast a structured array to one with a different byte order no longer works;
- comparing structured-array dtypes can give incorrect results if the two dtypes have different byte orders.

This pull request should fix both.

One thing I wasn't sure about is reordering struct fields.  In my implementation, the `equiv`, `same_kind`, and `safe` rules are now allowed to reorder fields.  If that isn't desired, though, it's a pretty easy change.
This is related to [my other recent reply](https://github.com/numpy/numpy/pull/5279/files#r21422015).  When I reverted @mdboom's  change to PyArray_EquivTypes in c53b0e4, it broke the feature that he was trying to enable, namely equality-comparison of structured arrays with different byte orders.  I fixed it by putting his logic for structured arrays directly in PyArray_CanCastTypeTo instead in the form of can_cast_fields, not going through PyArray_EquivTypes.  I modified @mdboom's logic to skip the field byte offset checks, since (unlike type comparison) I think we actually want casting generally to be able to move fields around (at least, 'unsafe' casting used to do this), but as I noted in the PR, this behavior is easily taken out if it's not wanted.  (I'm pretty sure 'safe' should be allowed to move fields, but I'm less sure about 'equiv'.)