Feature: Server Integration of the Garbage Collection

This adds the necessary interfaces in the CVMFS server functionality to use the garbage collection. Furthermore it adds bits and pieces in other classes to provide the garbage collection with the necessary data.

Things changed and added:
* `Catalog::AttachFreely()` can specify that a catalog *is not* root (before we only determined that by `parent_ != NULL`, which is now insufficient)
* `Catalog::GetReferencedObjects()` to retrieve all objects references of a specific catalog
* Fill the `ObjectFetcher` of the `CatalogTraversal` with life
* `cvmfs_server gc` to invoke the garbage collection
* `cvmfs_swissknife gc` for internal interfacing

Furthermore this adds a couple of integration tests to verify that the full chain of the garbage collection feature works as expected. One of those tests actually fails still, as named snapshots can produce dangling catalogs that are not reachable by CVMFS's data structures. This is left for future work, for now. 

**Note:** Based on [Refactor: MockCatalog for Unit Test Suite](https://github.com/cvmfs/cvmfs/pull/603), [Refactor: Put CatalogTraversal on Steroids](https://github.com/cvmfs/cvmfs/pull/604) and [Feature: Garbage Collection](https://github.com/cvmfs/cvmfs/pull/605)
Not sure what is faster: our hash set or a SELECT DISTINCT, but it is worth a try