Big refactoring of code to make the design more clear.

So we use an ImageLoader to load the image from cache by 2 levels : memory and disk.

Each ImageView now has an ImageLoader. The advantage is that we can use an ImageLoader in any object like ImageView or Button or ViewController.

The process of loading is done by the system of NSOperationQueue. So , in case of collection view or table view , the performance is optimized to load image quickly.