Fix ClassCastException in UnmodifiableMap as well as fix modifying unmodifiable structures through iterators

This merge request resolves #70.  I added a new structure (UnmodifiableCollection) which UnmodifiableSet now extends.  I also added new structures to prevent modification through the iterator.