Closes #8 - Made garbage collection iterator determine oldest active snapshot.  

Pull request for #8 

Created TimestampTracker to keep track of timestamps in Zookeeper.  Modified GC iterator to get oldest active timstamp from Zookeeper. Created integration tests for TimestampTracker and GCIterator
Thinking about the comment I made about having two locks and two conceptual statuses, could possibly do something like the following to allow for concurrency.   Have not thought about the synchronization in rest of code though, need to work out what background thread would do.

```java
   synchronized(advertiseLock){
      if (advertisedStatus == TrackerStatus.IDLE) {
        // initialize zookeeper node first with a timestamp
        updateZkNode(getTimestamp());
      }
    }
    
    Long ts = getTimestamp();
    
    synchronized(timestamps){
      timestamps.add(ts);
    }
```