Refactor: Use Hash Extension - Suffix Annotation

Yuk... GitHub ate my exhaustive description :-( 

TL;DWA (Too Long; Didn't Write Again)

This adds hash annotations to hashes being instantiated throughout the system. The usage code of those hash objects is not changing in most cases. Except the method `MakePath()` is now called `MakePathExplicit()`.

In some case, the hash suffix was already abstracted with a variable. Here I needed to use a crutch called `MakePathWithSuffix()` that checks for `suffix != shash::kSuffixNone` and adds the right char accordingly.

In the long run, I will remove most (probably all) calls to `MakePathExplicit()` by the convenience method `MakePath()`, that does hide some path details currently spread around the whole system. Like this:

```C++
shash::Any catalog_hash = MkFromHexPtr(shash::HexPtr(manifest.root_hash), shash::kSuffixCatalog);

// current usage (cumbersome call with unnecessary knowledge of path structure)
const std::string path =  "data" + catalog_hash.MakePathExplicit(1, 2) + "C"

// planned usage (path structure is fully encapsulated)
const std::string path = catalog_hash.MakePath();
```