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.
The id is supposed to be opaque so even though it is composed from the hashes, I didn't want to encode that assumption in business logic, thus allowing the id implementation to change later. I also wanted to allow for the future ability to search for data based on matching md5 or sha256.