[MRG] Supporting non array subclasses

The support (and test) for y being not an array subclass is implemented, but I still need to work on X.
> >          return safe_asarray(X)[:, safe_mask(X, mask)]

> The safe_asarray seems redundant now, isn't it?

Yes! I'll fix that.