Added non-mutating versions of all mutating list methods
Any method that is mutating now has an equivalent that returns the same
thing, but doesn't modify the orriginal array. The new method is named the
same as the orriginal method, but without a bang.

Example:

List.instance.push! = {
	[@self, [@f]]: @self.insert![@self.length, @f]
}

\# now has the non mutating method pair

List.instance.push = {
	[@self, [@f]]: @self.copy.push![@f]
}