Bug 1112376 - Initial cache implementation

This implements a cache implementation for favicons. All of basic favicons then basically becomes accessors into the OrderdCache implementation. I also made a DefaultCache that always returns a default value.

There are some strange caveots with generics and core data in here. I've tried to note them.
So what's the reason a site holds multiple favicons? Is it because it can serve them at different resolutions? We could just save the highest res favicon we need and use that like everywhere to avoid managing a set of favicons per site, especially since our designs have trending away from favicons recently.

Also, should Favicon be storing dimensions, or will we need to pull that from the image?