Add ResourceCatalog implementation

A ResourceCatalog is used to manage Resource entries, which correspond to data stored in a ResourceStorage. Each time a Resource is Put(), md5 and sha256 checksums are used to see if the underlying data is already stored, and if so a new entry is not created, but a ref count is incremented instead. The opposite happens on deletion.

The ResourceCatalog is not available externally - it will be used by the upcoming ManagedStorage implementation.
Agree about it not being exposed. But I didn't want implementation decisions based on a non opaque id to make it hard to change later if needed. The reason id is based on the hashes in the first place (instead of being a generated number) is due limitations in the mgo driver where an insert can't use an assert to check for document existence based on natural keys :-( I guess I'm hoping that could change and we could then seamlessly switch our implementation.