Created FDCache.

FDCache uses both a NSCache and FDWeakMutableDictionary to ensure only
objects that are no longer being referenced are evicted.