Fix potential memory issues

Currently, unless you explicitly call `-stopGIF` on an image view, the singletons will hold a reference to the view indefinitely.

This PR:

 1. Calls `-stopGIF` automatically on `removeFromSuperview`.
 2. Uses weak-referencing hash/map tables instead of NSMutableArray, which should be more memory efficient and better prevent leaks in general.