Feature: Garbage Collection

This is the first incarnation of a garbage collection feature. It makes heavy use of the `CatalogTraversal` class to crawl through the whole catalog graph of a repository and sweeps unneeded data objects. To find these objects, it uses a (currently pretty naïve) implementation of mark-and-sweep.

Internally the `GarbageCollector` class uses a `HashFilter`, that is filled with objects found in catalogs that need to be preserved. After this initialisation phase, `GarbageCollector` traverses all condemned catalogs and checks each of their hashes against the pre-initialised `HashFilter`. If the object is not referenced there, it is garbage and can be thrown away.

The implementation of the `HashFilter` is currently a simple `std::set<shash::Any>` and perhaps doesn't scale infinitely. Therefore the `GarbageCollector` class implements a strategy pattern with pluggable `HashFilters`. Usage of this possibility is left for future work.

The `GarbageCollector` itself is configurable like:

* Keep revisions up to a certain history depth
* Keep all revisions referenced by named snapshots
* Be verbose (list deleted objects)
* Dry Run: doesn't delete anything

Furthermore there is a unit test set checking the functionality of both the `GarbageCollector` and the `HashFilter`.

**Note:** Based on [Refactor: MockCatalog for Unit Test Suite](https://github.com/cvmfs/cvmfs/pull/603) and [Refactor: Put CatalogTraversal on Steroids](https://github.com/cvmfs/cvmfs/pull/604)
Probably it isn't as the catalog mangling might be orders of magnitude slower. Anyway, I added a  `HashFilter` [implementation](https://github.com/reneme/cvmfs/commit/781e83bbc2d00a90816cc6805fbfe5a85f87f7e4) based on `SmallHash`, and it gains a factor of 3 in a [synthetic test case](https://github.com/reneme/cvmfs/commit/347f2dce981f250e8aec0325e4358cf28194d4ee#diff-bbf07a4fcc84c96b00e501c78eb07da8R326). Please check the implementation, if I got the parameters for `SmallHash` right.