add timestamp parameter in GarbageCollector<>
prevent GarbageCollector<> from deleting everything
TEST: unit test for timestamp GC
TEST: try to delete everything
adapt usage string
adapt `cvmfs_swissknife gc` for timestamps
adapt `cvmfs_server gc` for timestamps
TEST: integration test for timestamp based GC
TraverseNamedSnapshots() ignores historic revisions
TEST: adapt T_CatalogTraversal unit test
TEST: check for correct sequences everywehere
always keep named snapshots
TEST: adapt unit test T_GarbageCollector
check for timestamp in the future
TEST: adapt test 560 for new GC behaviour
TEST: timestamp threshold with named tags and rollback
Merge pull request #612 from reneme/feature-integrate_timestamp_threshold

Feature: Integrate Timestamp Based Garbage Collection

This adds the possibility to do a garbage collection based on revision time stamps. The `cvmfs_server gc` command can now work in the following modes:

    # delete all revisions except tagged ones and HEAD
    cvmfs_server gc foo.repo.name
    
    # delete all revisions except tagged ones + <n> previous revisions before the HEAD
    cvmfs_server gc -r <n>
    
    # delete all revisions that are older than <t>
    # with <t> being a timespec readable by `date --date='<t>'`
    # Like: 'yesterday', '3 days ago', 'last week', '2014/11/15', ...
    cvmfs_server gc -t <t>
    
    # a mixture of -r and -t is prohibited

With the timestamp based garbage collection it is potentially possible to delete the HEAD revision as well, hence this is double-checked before.

Furthermore, this changes the handling of named snapshots and its ancestors. Before ancestors of each named snapshot would be preserved as well. Now only the named snapshots itself will be preserved + direct ancestors of HEAD. This seems a lot more logical and also fits the behaviour of the timestamp based garbage collection.

Additionally it contains two integration tests to verify the timestamp behaviour.