ENH: check for __array__ instead of ndarray subclasses when creating an Index

This allows custom ndarray-like objects which aren't actual ndarrays
to be smoothly cast to a pandas.Index:
https://github.com/pydata/pandas/issues/5460#issuecomment-44474502
Merge pull request #7270 from shoyer/use-__array__

ENH: check for __array__ instead of ndarray subclasses when creating an Index
TST: failing test
TST: bad func call
ENH: add anonymous s3 reading for public buckets