better is_iterable detection