abstract out some things that can be implemented in terms of new, add and forEach
start of an immutable list.
some basic stuff
destructive can't really make two mutable lists that behave the same way.