Call Bitmap.recycle() to reduce the potential for OOMs.

On Android versions < 3 bitmaps are allocated from the native heap, and
ones that are no longer used are not collected with a normal Java GC,
leading to OOMs, especially on low-end devices.

Fix this with the interaction of three components -- a wrapper for
bitmaps that knows about caching, the image cache, and a new
CacheableImageView.  The wrapper maintains counters updated by both
the cache and the image view to determine when it's safe to call
Bitmap.recycle().

Based on work by Chris Banes, see
https://github.com/chrisbanes/Android-BitmapCache.