Iterators and iterables – what are they and how do they work