ENH: Add Numpy Array Interface support to Pandas objects

WIP
hm, should Categorical have a `_typ`? 

The Series constructor has the `is_array_like` call in the `else`. However, that's because the `np.ndarray` check is a no-op. The Frame constructor has the `is_array_like` check above the big `if` block because we actually do stuff with `ndarrays` and the data needs to be transformed to trigger that conditional. I'll see how it looks checking for `is_array_like` within the `isinstance(data, (np.ndarray, Series, Index))` check and just `np.asarray` as needed within that block.