Make cast<> type checking more lenient

Previously, cast expressions would prohibit casting to anything unless
it had a compatible immutability. This prevented some useful things like
casting away nullability on contextually immutable or possibly-immutable
values.

Now, whenever the type checker encounters a cast that would fail because
it casts away contextual immutability, it assumes that the cast would
include contextual immutability if there was actually a way of
expressing it syntactically.

For possibly-immutable generic values, casting away nullability is now
allowed if the rest of the type is assignable without any problems, as
it should have been in the first place.
Make some Iterator + LinkedList methods immutable
Minor API and comment changes to LinkedList
Add ArrayList, List, and Iterable