Improved performance, file I/O, added methods

I tested everything apart from the `removeObjectsAtIndices:` method, but
that should work fine like this.

I changed the implementation to not use mutable objects in the immutable dictionary, and a ordered set has a big performance advantage over NSArray, so I replaced NSArray with NSOrderedSet for storing the keys.

The File IO uses NSKeyedArchiver and works nicely.