Make Sublist Read-Only

I have always believed that Sublist should be read-only. That means not
implementing IList<T>. It didn't make sense that IMutableSublist and
IReadOnlySublist did not implement IList and IExpandableSublist did.

This meant changing every Add method and the RemoveRange function to
return a new Sublist wrapping the new sublist.

I also introduced two new methods: Shift and Resize to create new
Sublists whose offset and counts are different.