Refactor: Catalog Traversal now uses Observable<>

This was a TODO in the code. Up to now `CatalogTraversal<>` used a homebrew callback implementation. Now it uses the more flexible API of the `Observable<>` template.
This mainly simplifies the interface for user code of `CatalogTraversal<>` and improves code reuse.

*TODO:* Currently `cvmfs_swissknife check` does not use `CatalogTraversal<>` but its own recursion implementation, this should be changed at some point.