Fix memory/speed issues

Currently, unless you explicitly call `-stopGIF` on an image view, the singletons will hold a reference to the view indefinitely.

Additionally, `-startGIF` is pretty expensive, as it does a bunch of CG prep-work on the main thread.

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.
 3. Makes sure that the UIImageView category releases image source refs.
 4. Prepares animations on a background queue to avoid blocking the main thread.