Better breadcrumb support

This is a rework of the cache and breadcrumb system.

Changes incldudes:
* CacheEntry are explicitely shared (if new data arrive, they are all updated at the same time, and can be compared, making cacheEntryList.exists() easier)
* Node is a new class, that saves the nodeIdentifier and filters used to query a node (or a page). The ICII is contained inside of a CacheEntry, so they are also cached. A node also have a list of CacheEntry to store the related content, that are cached and can be put into the model.
* CacheEntry uses a ref / deref system to know if there are still nodes using them. A node use one CacheEntry if it is the Node's CacheEntry or if the related content contains it.
* SNI contains nextPage, previousPage to navigate between pages. previousPage will load the node from the cache. nextPage try to use cache if possible, and if not, it loads new data.
* SNI::validateCacheEntryForNode() allows reloading of a node that only contains partial information (like the list of friends returned by /me/friends that only contains a list of identifiers and names) Not yet implemented in FacebookInterface yet.
* Loading data is made easier. Only three methods should be implemented, and some helper methods makes interacting directly with the cache useless.
* populate() must be called to perform a request (push a node), because a node now relies on both identifier and filters, so it might not be a good idea to push a node if only one of these two properties changes, and might be better to ask the developer to manually call populate().

It includes a simple unit test (snitest) to see if the new caching system works.