Improve and simplify fits Section indexing.

Add support for indexing fits Sections with slices with nontrivial (step != 1) slices, with integer arrays, and with boolean arrays.
I think Ellipsis is the only problematic case (and the mishandling happens at the very beginning, in the normalization part of `__getitem__`).  It seems easy enough to fix this, until you realize that the semantics of Ellipsis are not that clear (which of course you realize only when trying to implement something like this...): the docs say that "Ellipsis expand to the number of : objects needed to make a selection tuple of the same length as x.ndim.", but
```
>>> np.array([1])[..., 0]
array(1)
>>> np.array([1])[0]
1
```
Do you know what are the exact semantics of Ellipsis that explain this behavior?