Only generate concatenated iterable when list of iterables changes.

Also changes iterables collection to LinkedList, as it's only ever traversed, and needs to be dynamic