Added Iterator interface.

Now map, filter, etc return a new instance so as not to retroactively alter Object state
Clean up and comments
removed extra tab